我有一个按特定键排序的词典列表。每个字典包含32个元素,列表中有4000多个字典。我需要代码来处理这个列表,并返回一个新的列表,删除所有重复项。
这些链接中的方法:
别帮我,因为字典不好用。
有什么想法吗?如果你需要更多的信息,评论和我会添加的信息。
编辑:
重复字典是任何两个具有相同值的字典。
好的,这里有一个详细的解释给那些需要它的人。
我有一个字典列表,比如:
[ {
"ID" : "0001",
"Organization" : "SolarUSA",
"Matchcode" : "SolarUSA, Something Street, Somewhere State, Whatev Zip",
"Owner" : "Timothy Black",
}, {
"ID" : "0002",
"Organization" : "SolarUSA",
"Matchcode" : "SolarUSA, Something Street, Somewhere State, Whatev Zip",
"Owner" : "Johen Wilheim",
}, {
"ID" : "0003",
"Organization" : "Zapotec",
"Matchcode" : "Zapotec, Something Street, Somewhere State, Whatev Zip",
"Owner" : "Simeon Yurrigan",
} ]
在这个列表中,第一个和第二个词典是重复的,因为它们的Matchcodes
是相同的。
现在,此列表按以下代码排序:
# sort_by is "Matchcode"
def sort( list_to_be_sorted, sort_by ):
return sorted(list_to_be_sorted, key=lambda k: k[sort_by])
所以我有一个按Matchcode
排序的词典的整洁列表。现在我只需要遍历列表,访问list[dictionary][key]
,并在两个键值匹配时删除重复项。
使用
itertools.groupby()
按键值对词典进行分组,然后从每个组中获取第一个项。给出结果
我相信这就是你要找的。
编辑:我更喜欢独特的解决方案。它更短更具描述性。
对于现在已消除歧义的问题,此答案不正确。
所有的听写都有相同的键吗?如果是的话,编写一个函数
其中
unique_everseen
定义于http://docs.python.org/2/library/itertools.html如果dict不那么一致,请使用更通用的键,例如我发布到https://stackoverflow.com/a/2704866/192839的
FrozenDict
正如可以使用
tuple
来获得与list
等价的哈希表一样,也可以使用frozenset
来获得与dict
等价的哈希表。唯一的技巧是需要将d.items()
而不是d
传递给构造函数。然后你可以使用你最喜欢的解决方案,你已经看到。将它们转储到
set
中,或者如果需要保留顺序,则使用OrderedSet
或unique_everseen
配方。例如:或者,保持顺序并使用键值:
当然,如果列表或dict嵌套在其中,则必须递归转换,就像对列表列表的转换一样。
相关问题 更多 >
编程相关推荐