Python cookbook(数据结构与算法)依照字段将记录分组操作示例,pythoncookbook

正文实例叙述了Python依照字段将记录分组操作。分享给大家供大家参照他事他说加以考察,具体如下:

问题:想根据字典或许指标实例的某部特定的字典(举个例子日期)来分组迭代数据

缓和方案:itertools.groupby()函数在对数码进行分组时特地有用(前提是先以目的字典举办排序)

rows = [
  {'address': '5412 N CLARK', 'date': '07/01/2012'},
  {'address': '5148 N CLARK', 'date': '07/04/2012'},
  {'address': '5800 E 58TH', 'date': '07/02/2012'},
  {'address': '2122 N CLARK', 'date': '07/03/2012'},
  {'address': '5645 N RAVENSWOOD', 'date': '07/02/2012'},
  {'address': '1060 W ADDISON', 'date': '07/02/2012'},
  {'address': '4801 N BROADWAY', 'date': '07/01/2012'},
  {'address': '1039 W GRANVILLE', 'date': '07/04/2012'},
]
from operator import itemgetter
from itertools import groupby
rows.sort(key=itemgetter('date')) #首先以date字段进行排序
for date, items in groupby(rows, key=itemgetter('date')): #再以date进行分组
  print(date)
  for i in items:
    print('  ', i)
# 如果只是简单地根据日期将数据分组到一起,放进一个大的数据结构中以允许进行随机访问,那么可以利用defaultdict构建一个一键多值的字典会更好
#Example of building a multidict
from collections import defaultdict
rows_by_date = defaultdict(list) #创建一个一键多值的字典,
for row in rows:
  rows_by_date[row['date']].append(row)
for r in rows_by_date['07/01/2012']:
  print(r)

运转结果:

07/01/2012
   {'address': '5412 N CLARK', 'date': '07/01/2012'}
   {'address': '4801 N BROADWAY', 'date': '07/01/2012'}
07/02/2012
   {'address': '5800 E 58TH', 'date': '07/02/2012'}
   {'address': '5645 N RAVENSWOOD', 'date': '07/02/2012'}
   {'address': '1060 W ADDISON', 'date': '07/02/2012'}
07/03/2012
   {'address': '2122 N CLARK', 'date': '07/03/2012'}
07/04/2012
   {'address': '5148 N CLARK', 'date': '07/04/2012'}
   {'address': '1039 W GRANVILLE', 'date': '07/04/2012'}
{'address': '5412 N CLARK', 'date': '07/01/2012'}
{'address': '4801 N BROADWAY', 'date': '07/01/2012'}

(代码摘自《Python Cookbook》)

更多关于Python相关内容感兴趣的读者可查阅本站专项论题:《Python数据结构与算法教程》、《Python函数使用技艺总括》、《Python字符串操作本领汇总》、《Python入门与进级卓越教程》及《Python文件与目录操作本事汇总》

指望本文所述对大家Python程序设计有着支持。

cookbook(数据结构与算法)依照字段将记录分组操作示例,pythoncookbook
本文实例陈诉了Python依照字段将记录分组操作。分享给大家供大家…

Python cookbook(数据结构与算法)字典相关测算难点示例,pythoncookbook

正文实例呈报了Python
cookbook(数据结构与算法)字典相关测算难题。分享给大家供我们参谋,具体如下:

问题:在字典上对数据实践多姿多彩的计量(例如求最小值、最大值、排序)。

建设方案:利用zip()将字典的键-值对“反转”为值-键对队列。

比方:如下字典寄存的期货(Futures)名称和对应的标价:

>>> prices = {
 'ACME': 45.23,
 'AAPL': 612.78,
 'IBM': 205.55,
 'HPQ': 37.20,
 'FB': 10.75
}
>>> prices
{'HPQ': 37.2, 'IBM': 205.55, 'FB': 10.75, 'ACME': 45.23, 'AAPL': 612.78}
>>> min_price = min(zip(prices.values(), prices.keys())) #注意zip(x,y)中参数的顺序
>>> max_price = max(zip(prices.values(), prices.keys()))
>>> min_price
(10.75, 'FB')
>>> max_price
(612.78, 'AAPL')
>>> prices_sorted = sorted(zip(prices.values(), prices.keys()))
>>> prices_sorted
[(10.75, 'FB'), (37.2, 'HPQ'), (45.23, 'ACME'), (205.55, 'IBM'), (612.78, 'AAPL')]
>>> min_price2 = min(zip(prices)) #错误用法
>>> min_price2
('AAPL',)
>>> max_price2 = max(zip(prices)) #错误用法
>>> max_price2
('IBM',)
>>> min_price3 = min(zip(prices.keys(), prices.values())) #zip()参数顺序不对,获取错误的值
>>> min_price3
('AAPL', 612.78)
>>> max_price3 = max(zip(prices.keys(), prices.values())) #zip()参数顺序不对,获取错误的值
>>> max_price3
('IBM', 205.55)
>>>

扩充那个总计时,请小心zip()创造了二个迭代器,它的剧情只能源消成本叁遍。比如:

>>> pirces_and_names=zip(prices.values(), prices.keys())
>>> pirces_and_names
<zip object at 0x023BDFA8>
>>> min(pirces_and_names)
(10.75, 'FB')
>>> max(pirces_and_names)
Traceback (most recent call last):
 File "<pyshell#25>", line 1, in <module>
 max(pirces_and_names)
ValueError: max() arg is an empty sequence
>>>

注意:当提到(value,key)对的可比时,碰巧有多少个条目具有一样的value值,那么此时key将用来作为推断结果的基于。

>>> prices={'AAA':45.23,'ZZZ':45.23}
>>> min(zip(prices.values(), prices.keys()))
(45.23, 'AAA')
>>> max(zip(prices.values(), prices.keys()))
(45.23, 'ZZZ')
>>>

(代码摘自《Python Cookbook》)

更加的多关于Python相关内容感兴趣的读者可查看本站专项论题:《Python数据结构与算法教程》、《Python函数使用手艺总计》、《Python字符串操作技艺汇总》、《Python入门与进级卓越教程》及《Python文件与目录操作技艺汇总》

瞩望本文所述对大家Python程序设计有着协理。

cookbook(数据结构与算法)字典相关测算难题示例,pythoncookbook
本文实例叙述了Python
cookbook(数据结构与算法)字典相关测算难题。分…

正文实例陈说了Python依照字段将记录分组操作。分享给大家供大家参照他事他说加以考察,具体如下:

问题:想根据字典或然目的实例的有些特定的字典(比方日期)来分组迭代数据

斩草除根方案:itertools.groupby()函数在对数据实行分组时特意有用(前提是先以目的字典举办排序)

rows = [
  {'address': '5412 N CLARK', 'date': '07/01/2012'},
  {'address': '5148 N CLARK', 'date': '07/04/2012'},
  {'address': '5800 E 58TH', 'date': '07/02/2012'},
  {'address': '2122 N CLARK', 'date': '07/03/2012'},
  {'address': '5645 N RAVENSWOOD', 'date': '07/02/2012'},
  {'address': '1060 W ADDISON', 'date': '07/02/2012'},
  {'address': '4801 N BROADWAY', 'date': '07/01/2012'},
  {'address': '1039 W GRANVILLE', 'date': '07/04/2012'},
]
from operator import itemgetter
from itertools import groupby
rows.sort(key=itemgetter('date')) #首先以date字段进行排序
for date, items in groupby(rows, key=itemgetter('date')): #再以date进行分组
  print(date)
  for i in items:
    print('  ', i)
# 如果只是简单地根据日期将数据分组到一起,放进一个大的数据结构中以允许进行随机访问,那么可以利用defaultdict构建一个一键多值的字典会更好
#Example of building a multidict
from collections import defaultdict
rows_by_date = defaultdict(list) #创建一个一键多值的字典,
for row in rows:
  rows_by_date[row['date']].append(row)
for r in rows_by_date['07/01/2012']:
  print(r)

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注