保留字典中重复值的第一次出现
Keep first occurrence in duplicated values in dictionary
字典中有重复值,例如:
dict_numbers={'one':['one', 'first','uno', 'une'],
'zero':['zero','nothing','cero'],
'first':['one', 'first','uno', 'une'],
'dos':['two','second','dos', 'segundo','deux'],
'three':['three','tres','third','tercero'],
'second':['two','second','dos','segundo','deux'],
'forth':['four','forth', 'cuatro','cuarto'],
'two': ['two','second','dos', 'segundo','deux'],
'segundo':['two','second','dos', 'segundo','deux']}
我想获取第一次出现的具有重复值的键。请注意,字典没有重复的键,但有重复的值。在这个例子中,我会得到一个列表,保留第一次出现的重复值:
list_numbers_no_duplicates=['one','zero','dos','three','forth']
first
键被删除,因为 one
已经有相同的值。
second
键被删除,因为 dos
已经有相同的值。
two
键被删除,因为 dos
已经有相同的值。
如何跟踪键值中的多个重复值?
提前致谢
希望我正确理解了您的目标。以下使用 ever-so-useful itertools 包中的 chain
。
>>> {key: vals for i, (key, vals) in enumerate(dict_numbers.items())
if key not in chain(*list(dict_numbers.values())[:i])}
{'one': ['one', 'first', 'uno', 'une'],
'zero': ['zero', 'nothing', 'cero'],
'dos': ['two', 'second', 'dos', 'segundo', 'deux'],
'three': ['three', 'tres', 'third', 'tercero'],
'forth': ['four', 'forth', 'cuatro', 'cuarto']}
本质上,这是通过为在前面的任何列表中都没有找到键的条目重新创建原始字典来工作的(因此枚举和切片恶作剧)。
字典中有重复值,例如:
dict_numbers={'one':['one', 'first','uno', 'une'],
'zero':['zero','nothing','cero'],
'first':['one', 'first','uno', 'une'],
'dos':['two','second','dos', 'segundo','deux'],
'three':['three','tres','third','tercero'],
'second':['two','second','dos','segundo','deux'],
'forth':['four','forth', 'cuatro','cuarto'],
'two': ['two','second','dos', 'segundo','deux'],
'segundo':['two','second','dos', 'segundo','deux']}
我想获取第一次出现的具有重复值的键。请注意,字典没有重复的键,但有重复的值。在这个例子中,我会得到一个列表,保留第一次出现的重复值:
list_numbers_no_duplicates=['one','zero','dos','three','forth']
first
键被删除,因为 one
已经有相同的值。
second
键被删除,因为 dos
已经有相同的值。
two
键被删除,因为 dos
已经有相同的值。
如何跟踪键值中的多个重复值?
提前致谢
希望我正确理解了您的目标。以下使用 ever-so-useful itertools 包中的 chain
。
>>> {key: vals for i, (key, vals) in enumerate(dict_numbers.items())
if key not in chain(*list(dict_numbers.values())[:i])}
{'one': ['one', 'first', 'uno', 'une'],
'zero': ['zero', 'nothing', 'cero'],
'dos': ['two', 'second', 'dos', 'segundo', 'deux'],
'three': ['three', 'tres', 'third', 'tercero'],
'forth': ['four', 'forth', 'cuatro', 'cuarto']}
本质上,这是通过为在前面的任何列表中都没有找到键的条目重新创建原始字典来工作的(因此枚举和切片恶作剧)。