保留重复值-Python字典

时间:2019-11-22 23:00:37

标签: python dictionary duplicates

我是Python新手,找不到解决方法。

我试图在输出字典中(如在输入字符串中)打印对['11','2']两次,但是它的某个地方被删除了。 有人可以帮忙吗?

import operator
a="2000 10003 1234000 44444444 9999 11 11 22 123"
a = a.split()
if len(a)<1:
    print("List is empty")
else:
    thisdict={}
    print (a)
    arr = []
    m=-1
    for i in range(0,len(a)):
        m+=1
        k=0
        for j in list(a[m]):
                k = k + int(j)
        thisdict[a[m]] = k
        i=i+1
    sorted_dict = sorted(thisdict.items(), key=lambda kv: kv[1])
    print(sorted_dict)

输出:

['2000', '10003', '1234000', '44444444', '9999', '11', '11', '22', '123']

[('2000', 2), ('11', 2), ('10003', 4), ('22', 4), ('123', 6), ('1234000', 10), ('44444444', 32), ('9999', 36)]

预期输出:

['2000', '10003', '1234000', '44444444', '9999', '11', '11', '22', '123']

[('2000', 2), ('11', 2), ('11', 2), ('10003', 4), ('22', 4), ('123', 6), ('1234000', 10), ('44444444', 32), ('9999', 36)]

1 个答案:

答案 0 :(得分:2)

Python词典不能包含2个相同的对象作为键。 (或更准确地说,共享相同的hash的对象)。

既然您的输出仍然是一个元组列表,那么为什么不首先去那里(而不是通过不能做到这一点的字典)?

这里是这样的:

a = "2000 10003 1234000 44444444 9999 11 11 22 123"
result = [(value, sum(int(char) for char in value)) for value in a.split()]
sorted_result = sorted(result, key=lambda x: (x[1], x[0]))
print(sorted_result)

输出:

[('11', 2), ('11', 2), ('2000', 2), ('10003', 4), ('22', 4), ('123', 6), ('1234000', 10), ('44444444', 32), ('9999', 36)]