在此给定的字典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]}}
数值726
和128
是键,是唯一的。其他元素是使用unique identifier
标记的值,也是唯一的。
我想仅从list values
中的chr
删除重复项,而不会影响字典中任何其他部分的数据或值的顺序。
我怎么能做到这一点?
谢谢,
答案 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。