从字典列表中为另一个字典获取相同的键值
get same value for keys into another dictionary from List of Dictionary
这是我的词典列表。
d = [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'},
{'count': '50', 'zone': 'PIMPRI', 'cycle': '15'},
{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]
如何获得如下输出:
d_one = [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'},
{'count': '50', 'zone': 'PIMPRI', 'cycle': '15'}]
d_two = [{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]
从两个键区和循环的字典列表中获取不同的数据。对于相同的区域和循环对,创建一个字典列表,直到结束。
您想要filter您的数据:
d_one = filter(lambda d:d['cycle']=='15',d)
> [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'},
> {'count': '50', 'zone': 'PIMPRI', 'cycle': '15'}]
和
d_two = filter(lambda d:d['cycle']=='30',d)
> [{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]
一种方法是使用集合。并将您的变量('cycle'
)作为字典中的键。
例如:
import collections
res = collections.defaultdict(list)
d = [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'},
{'count': '50', 'zone': 'PIMPRI', 'cycle': '15'},
{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]
for i in d:
res[i["cycle"]].append(i)
print(res['15'])
print("-----")
print(res['30'])
输出:
[{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'}, {'count': '50', 'zone': 'PIMPRI', 'cycle': '15'}]
-----
[{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]
试试 groupby
,
from itertools import groupby
from operator import itemgetter
grouper = itemgetter("cycle", "zone")
dict_one,dict_two = (list(g) for _,g in groupby(d,key=grouper))
代码将 return 一个元组,现在我们只有 2 个元素。因此,值分配将在这里起作用。如果您有更多的值,您可以将这些值分配给 dict
或存储为可迭代的。
输出
In [9]: dict_one
Out[9]:
[{'count': '100', 'cycle': '15', 'zone': 'PIMPRI'},
{'count': '50', 'cycle': '15', 'zone': 'PIMPRI'}]
In [10]: dict_two
Out[10]: [{'count': '150', 'cycle': '30', 'zone': 'PIMPRI'}]
为什么要为所有这些值使用单独的字典。你不能把它写到一本字典里吗?例如,
d = [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'},
{'count': '50', 'zone': 'PIMPRI', 'cycle': '15'},
{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]
这是我们能得到的,
res = {}
for ele in d:
res.setdefault((ele['cycle'],ele['zone']), [])
res[(ele['cycle'], ele['zone'])].append(ele['count'])
使用 (dct['zone'], dct['cycle'])
对作为关键字生成字典:
>>> result = {}
>>>
>>> for dct in d:
... result.setdefault((dct['zone'], dct['cycle']), []).append(dct)
...
>>> result
{('PIMPRI', '15'): [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'}, {'count': '50', 'zone': 'PIMPRI', 'cycle': '15'}], ('PIMPRI', '30'): [{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]}
这是我的词典列表。
d = [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'},
{'count': '50', 'zone': 'PIMPRI', 'cycle': '15'},
{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]
如何获得如下输出:
d_one = [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'},
{'count': '50', 'zone': 'PIMPRI', 'cycle': '15'}]
d_two = [{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]
从两个键区和循环的字典列表中获取不同的数据。对于相同的区域和循环对,创建一个字典列表,直到结束。
您想要filter您的数据:
d_one = filter(lambda d:d['cycle']=='15',d)
> [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'},
> {'count': '50', 'zone': 'PIMPRI', 'cycle': '15'}]
和
d_two = filter(lambda d:d['cycle']=='30',d)
> [{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]
一种方法是使用集合。并将您的变量('cycle'
)作为字典中的键。
例如:
import collections
res = collections.defaultdict(list)
d = [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'},
{'count': '50', 'zone': 'PIMPRI', 'cycle': '15'},
{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]
for i in d:
res[i["cycle"]].append(i)
print(res['15'])
print("-----")
print(res['30'])
输出:
[{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'}, {'count': '50', 'zone': 'PIMPRI', 'cycle': '15'}]
-----
[{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]
试试 groupby
,
from itertools import groupby
from operator import itemgetter
grouper = itemgetter("cycle", "zone")
dict_one,dict_two = (list(g) for _,g in groupby(d,key=grouper))
代码将 return 一个元组,现在我们只有 2 个元素。因此,值分配将在这里起作用。如果您有更多的值,您可以将这些值分配给 dict
或存储为可迭代的。
输出
In [9]: dict_one
Out[9]:
[{'count': '100', 'cycle': '15', 'zone': 'PIMPRI'},
{'count': '50', 'cycle': '15', 'zone': 'PIMPRI'}]
In [10]: dict_two
Out[10]: [{'count': '150', 'cycle': '30', 'zone': 'PIMPRI'}]
为什么要为所有这些值使用单独的字典。你不能把它写到一本字典里吗?例如,
d = [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'},
{'count': '50', 'zone': 'PIMPRI', 'cycle': '15'},
{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]
这是我们能得到的,
res = {}
for ele in d:
res.setdefault((ele['cycle'],ele['zone']), [])
res[(ele['cycle'], ele['zone'])].append(ele['count'])
使用 (dct['zone'], dct['cycle'])
对作为关键字生成字典:
>>> result = {}
>>>
>>> for dct in d:
... result.setdefault((dct['zone'], dct['cycle']), []).append(dct)
...
>>> result
{('PIMPRI', '15'): [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'}, {'count': '50', 'zone': 'PIMPRI', 'cycle': '15'}], ('PIMPRI', '30'): [{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]}