3 回答
TA贡献2011条经验 获得超2个赞
最简单的方法可能是使用defaultdict. 我假设您实际上想"animal"在输出中删除标签,因为您在输入中也缺少逗号,因此很可能是拼写错误。
from collections import defaultdict
output = defaultdict(list)
inp = [
{
"animal": "Tiger",
"country": "US",
"color": "yellow-black"
},
{
"animal": "Dog",
"country": "UK",
"color": "brown"
},
{
"animal": "Tiger",
"country": "Nepal",
"color": "yellow-black"
}
]
for item in inp:
output[item['animal']].append({k: v for k, v in item.items()
if k != 'animal'})
根据您的字典中有多少键/值对,简单地从字典中删除键可能会更快,而不是使用字典理解来重建排除该键的字典。对于这种大小的样本,速度确实无关紧要,并且不会冒险改变您的初始数据。
TA贡献1859条经验 获得超6个赞
这将是您的固定尝试 - 但它需要预先排序并且不如 defaultdict 有效:
# fixed data
data = [ { "animal": "Tiger", "country": "US", "color": "yellow-black" },
{ "animal": "Dog", "country": "UK", "color": "brown" },
{ "animal": "Tiger", "country": "Nepal", "color": "yellow-black" } ]
from itertools import groupby
# groupby needs sorted keys if you want to group them together
grouped = dict((k, list(g)) for k, g in groupby(sorted(data,key=lambda x:x["animal"]),
key=lambda x:x['animal']))
# delete the animal key
for k in grouped:
for inner in grouped[k]:
del inner["animal"]
print(grouped)
输出:
{ 'Dog': [{'country': 'UK', 'color': 'brown'}],
'Tiger': [{'country': 'US', 'color': 'yellow-black'},
{'country': 'Nepal', 'color': 'yellow-black'}]}
独库:
itertools.groupby()
制作一个迭代器,从迭代中返回连续的键和组。键是为每个元素计算键值的函数。如果未指定或为 None,则 key 默认为标识函数并返回未更改的元素。通常,迭代需要已经在同一个键函数上排序。
TA贡献1934条经验 获得超2个赞
不会是一个衬垫,但defaultdict就是一个去与
from collections import defaultdict
d=defaultdict(list)
for i in input:
d[i['animal']].append({k:v for k,v in i.items() if k!='animal' })
添加回答
举报