来自两个列表的字典,包括键的多个值

时间:2019-11-25 18:54:36

标签: python dictionary

是否可以从两个具有相同键的列表中创建一个字典,而该键多次出现而无需遍历整个数据集?

最小示例:

a>b

使用if时,会插入键值对以覆盖旧的键对:

a = random.randint(1, 10)
b = random.randint(1, 10)

while a >= b:
    a = random.randint(1, 10)
    b = random.randint(1, 10)

c = random.randint(a, b)
print(c)

我对Multidict也很满意。

3 个答案:

答案 0 :(得分:2)

这是一种不需要2个for循环的方法

h = defaultdict(list)
for k, v in zip(keys, values):
    h[k].append(v)

print(h)
# defaultdict(<class 'list'>, {1: [1, 8], 2: [2, 4], 3: [3, 5], 4: [6], 5: [7]})

print(dict(h))
# {1: [1, 8], 2: [2, 4], 3: [3, 5], 4: [6], 5: [7]}


答案 1 :(得分:0)

这是我唯一能做的。

dictionary = {k: [values[i] for i in [j for j, x in enumerate(keys) if x == k]] for k in set(keys)}

这远非易读。请记住,清晰的代码总是比伪聪明的代码更好;)

答案 2 :(得分:-1)

这是一个我认为很容易遵循逻辑的例子。不幸的是,它没有像您希望的那样使用zip,也没有避免迭代,因为这样的任务必须涉及某种形式的迭代。

# Your data
keys = [1, 2, 3, 2, 3, 4, 5, 1]
values = [1, 2, 3, 4, 5, 6, 7, 8]

# Make result dict
result = {}
for x in range(1, max(keys)+1):
    result[x] = []

# Populate result dict
for index, num in enumerate(keys):
    result[num].append(values[index])

# Print result
print(result)

如果您知道keys数组中的值范围,则可以通过提供results字典作为带有整数键和空列表值的文字来加快此过程。