如何一次只从字典的一个元素中删除重复值?

时间:2017-03-14 18:12:40

标签: python list dictionary duplicates defaultdict

在此给定的字典defaultdict(dict)中输入数据:

{726: {'X': [3.5, 3.5, 2.0}, 'Y': [2.0, 0.0, 0.0], 'chr': [2, 2, 2]}, 128: {'X': [0.5, 4.0, 4.0], 'Y': [4.0, 3.5, 3.5], 'chr': [3, 3, 3]}}

数值726128是键,是唯一的。其他元素是使用unique identifier标记的值,也是唯一的。

我想仅从list values 中的chr删除重复项,而不会影响字典中任何其他部分的数据或值的顺序。

我怎么能做到这一点?

谢谢,

4 个答案:

答案 0 :(得分:1)

您可以使用嵌套字典理解并将列表转换为OLD_IFS=IFS IFS=$'\n\t' for f in $(tst get files | sed 1d | cut -d$'\t' -f1) do echo "FILE :[${f}]" done 以获取一组唯一的项目。由于set值范围内的所有项目都相同,因此该集合将生成1个项目,因此在这种情况下,顺序并不重要。否则,您可以使用chr通过保留订单来获取一组唯一的商品。

OrderedDict.fromkeys()

答案 1 :(得分:1)

如果d是您的字典,您只需执行以下操作:

for k in d: d[k]['chr']=d[k]['chr'][0]

假设chr。

中的唯一值

如果存在多个值,

for k in d: 
 l=d[k]['chr']+[None]
 d[k]['chr']=[x for (i,x) in enumerate(l[:-1]) if l[i]!=l[i+1]] 

将完成这项工作。

答案 2 :(得分:1)

您应该做的是迭代唯一键,并为每个唯一键选择' chr'键并将其值转换为集合(只能具有唯一值)。

for lists in YOUR_DICT.values():
    lists['chr'] = list(set(lists['chr']))
print(YOUR_DICT)
# {'726': {'Y': [2.0, 0.0, 0.0], 'X': [3.5, 3.5, 2.0], 'chr': [2]}, 
#  '128': {'Y': [4.0, 3.5, 3.5], 'X': [0.5, 4.0, 4.0], 'chr': [3]}}

答案 3 :(得分:1)

这将保留列表的顺序:

from collections import OrderedDict
a={726: {'X': [3.5, 3.5, 2.0], 'Y': [2.0, 0.0, 0.0], 'chr': [2, 3, 2, 1, 1, 2, 3 ]}, 128: {'X': [0.5, 4.0, 4.0], 'Y': [4.0, 3.5, 3.5], 'chr': [3, 3,3]}}
b=copy.deepcopy(a)
for key in b:
    a[key]['chr']=list(OrderedDict.fromkeys(b[key]['chr'])) 

创建a时,a中顶级键的原始顺序将丢失。如果你想要一个726首先你需要从头开始创建OrderedDict。