试图从键值对数组的数组创建字典的列表理解

2024-10-03 23:24:02 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试使用列表理解创建dict时(不覆盖生成的列表键)

x = {}
entries = [[1,'1a'], [2,'2a'], [3,'3a'], ['1', '1b'], ['2', '2b'], ['3', '3b']]
discardable = [x.setdefault(entry[0], []).append(entry[1]) for entry in entries]

Error: name 'x' is not defined

我希望x将填充为:

{1: ['1a', '1b'], 2: ['2a', '2b'], 3: ['3a', '3b']}

如何解释这一点/使其发挥作用? 有没有其他方法可以做到这一点


Tags: namein列表forisnoterrordict
3条回答

您可以尝试:

from collections import defaultdict
entries = [['1','1a'], [2,'2a'], [3,'3a'], ['1', '1b'], ['2', '2b'], ['3', '3b']]
x = defaultdict(list)
[x[a].append(b) for a,b in entries]
x = dict(x)

输出

{'1': ['1a', '1b'], 2: ['2a'], 3: ['3a'], '2': ['2b'], '3': ['3b']}

您需要合并(1,'1')、(2,'2')、(3,'3')的值。您提供的代码可以工作,但它不处理intstr之间的类型。您所需要做的就是将str强制转换为int,以便合并该值

试试这个:

x = {}
entries = [[1,'1a'], [2,'2a'], [3,'3a'], ['1', '1b'], ['2', '2b'], ['3', '3b']]
discardable = [x.setdefault(int(entry[0]), []).append(entry[1]) for entry in entries]

有些键是str,有些是int,因此这将产生

{'1': ['1a', '1b'], 2: ['2a'], 3: ['3a'], '2': ['2b'], '3': ['3b']}

您需要将entry[0]强制转换为int

x = {}
entries = [[1,'1a'], [2,'2a'], [3,'3a'], ['1', '1b'], ['2', '2b'], ['3', '3b']]
[x.setdefault(int(entry[0]), []).append(entry[1]) for entry in entries]

print(x)将给出

{1: ['1a', '1b'], 2: ['2a', '2b'], 3: ['3a', '3b']}

相关问题 更多 >