gpt4 book ai didi

python - 在 OrderedDict 中使重复值唯一

转载 作者:太空宇宙 更新时间:2023-11-04 02:07:31 24 4
gpt4 key购买 nike

有一个有序的字典,它有重复的键值对。想让那些重复的值变得唯一。例如。 4244158 & 4244159 组合存在两次我想保留其中一个。

现在下面提到的代码在 python2 中很好用,因为有序字典可以变异但在 python3 中不行,所以我复制了一个有序字典并将其与原始有序字典进行比较

ordered_parkstop_dict = OrderedDict([('4244162', []),
('4244158', ['4244159']),
('4244159', ['4244158']),
('4244157', ['4244160', '4244161']),
('4244160', ['4244157', '4244161']),
('4244161', ['4244157', '4244160'])])
new_ordered_parkstop_dict = ordered_parkstop_dict.copy()
for key, value in ordered_parkstop_dict.items():
for k,v in ordered_parkstop_dict.items():
klist = []
keylist = []
if value and v:
if len(v)==1 and len(value)==1:
klist.append(k), keylist.append(key)
if (keylist == v) and (klist == value and len(value) == 1):
new_ordered_parkstop_dict.pop(key)

澄清一下,我只想删除 x -> [y], y -> [x] 类型的副本,即包含一项的列表。

最佳答案

假设您希望删除具有单个 列表项的重复项,您可以调整 itertools unique_eveseen recipe .这个想法是维护一个 setfrozenset 项目,并且只有当你遇到一个包含一个项目的列表时才添加到它。

from collections import OrderedDict

def unique_everseen(iterable):
seen = set()
seen_add = seen.add
for key, value in iterable:
if len(value) != 1:
yield key, value
else:
if frozenset((value[0], key)) not in seen:
seen_add(frozenset((value[0], key)))
yield key, value

res = OrderedDict(unique_everseen(dd_input.items()))

在 Python3 中,您在任何情况下都不应在添加/删除项目时迭代 dict.items 等 View 。

结果:

print(res)

OrderedDict([('4244162', []),
('4244158', ['4244159']),
('4244157', ['4244160', '4244161']),
('4244160', ['4244157', '4244161']),
('4244161', ['4244157', '4244160'])])

关于python - 在 OrderedDict 中使重复值唯一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54326799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com