Python:使用list()函数无法正确创建字典列表,能否实现?
如何用
list()函数正确创建字典列表 当然可以用list()函数生成正确的字典列表——你之前的问题出在传递给list()的参数上,我来一步步拆解:
为什么你的代码得到了不符合预期的结果?
看你写的代码:
list(({'szkola':szkola, 'klasa':klasa}))
这里的括号其实没有创建一个包含字典的元组!在Python里,单个元素的元组必须加逗号才能被识别,否则括号只是用来提升表达式优先级的。所以上面的代码等价于:
list({'szkola':szkola, 'klasa':klasa})
而list()函数接收的是一个可迭代对象,当你把字典直接传给它时,Python会默认迭代字典的键(这是字典的默认迭代行为),所以最终得到的是字典键组成的列表:['szkola', 'klasa']。
用list()创建字典列表的正确方法
只要给list()传递一个包含字典的可迭代对象(比如列表、带逗号的元组,或者生成器),就能得到正确的结果:
方法1:传递包含字典的列表
把字典放在列表里传给list(),list()会迭代这个列表并保留字典作为元素:
klasa = '3b' szkola = 'gimnazjum' result = list([{'szkola':szkola, 'klasa':klasa}]) print(result) # 输出: [{'szkola': 'gimnazjum', 'klasa': '3b'}]
方法2:传递带逗号的元组
如果想用元组,一定要记得加逗号,让Python识别这是一个元组而不是表达式括号:
result = list(({'szkola':szkola, 'klasa':klasa},)) print(result) # 输出: [{'szkola': 'gimnazjum', 'klasa': '3b'}]
方法3:用生成器表达式
如果你需要动态生成(比如创建多个重复字典的列表),可以用生成器表达式:
# 创建包含1个字典的列表 result = list({'szkola':szkola, 'klasa':klasa} for _ in range(1)) print(result) # 输出: [{'szkola': 'gimnazjum', 'klasa': '3b'}] # 扩展:创建包含3个相同字典的列表 result = list({'szkola':szkola, 'klasa':klasa} for _ in range(3)) print(result) # 输出: [{'szkola': 'gimnazjum', 'klasa': '3b'}, {'szkola': 'gimnazjum', 'klasa': '3b'}, {'szkola': 'gimnazjum', 'klasa': '3b'}]
额外提示
其实直接用方括号[{'szkola':szkola, 'klasa':klasa}]是创建单元素字典列表最简洁的方式,没必要额外调用list()函数。但如果你的场景确实需要用list()(比如基于某个可迭代对象动态生成),上面的方法都能满足需求。
内容的提问来源于stack exchange,提问作者Dawid
相关产品推荐
相关产品推荐

