是否可以从两个具有相同键的列表中创建一个字典,而该键多次出现而无需遍历整个数据集?
最小示例:
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也很满意。
答案 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
字典作为带有整数键和空列表值的文字来加快此过程。