在字典中丢失数据

时间:2017-06-23 04:33:11

标签: python list dictionary

我有2个列表,我正在合并这样,是否有一种方法可以合并而不会丢失数据,因为我在代码中有重复项?

new = dict(zip(sortedPrimes, a))

既有排序公式又有' a'当我使用len()时,是包含1062个元素的列表。然而,当我打印len(新)时,我将它们压缩在一起时,我得到336.这之前没有发生过,数据在哪里?

其余代码:

def rwh_primes(n):
    sieve = [True] * n
    for i in range(3,int(n**0.5)+1,2):
        if sieve[i]:
            sieve[i*i::2*i]=[False]*int((n-i*i-1)/(2*i)+1)
    return [2] + [i for i in range(3,n,2) if sieve[i]]

numbers = rwh_primes(10000)

a = [x for x in numbers if x > 1000]

final = []
sortedPrimes = []
for x in a:
    sortedPrimes.append(''.join(sorted(str(x))))

lisp = [x for n, x in enumerate(sortedPrimes) if x in sortedPrimes[:n]]
new = dict(zip(sortedPrimes, a))

2 个答案:

答案 0 :(得分:3)

print(len(set(sortedPrimes))) # Count of unique keys: 336

字典将值哈希到键。那些关键不重复。在sortedPrimes中有336个独特的项目,因此新的

中有336个键

答案 1 :(得分:0)

您遇到一个键映射到多个值的情况。在这种情况下,一个合理的数据结构是列表的字典:

import collections

d = collections.defaultdict(list)
for v1, v2 in zip(sortedPrimes, a):
    d[v1].append(v2)

for k in sorted(d):
    print k, d[k]

# Output   
0013 [3001]
0014 [4001]
0017 [7001]
0019 [1009, 9001]
0023 [2003]
0034 [4003]
0035 [5003]
0047 [4007]
0059 [5009]
0067 [6007]
0079 [9007]
0089 [8009]
0112 [1021, 1201, 2011]
0113 [1013, 1031, 1103, 1301, 3011]
0115 [1051, 5011, 5101]
etc. for all 336 keys ...