我正在尝试从列表和固定变量创建字典。我知道zip()
可以从两个列表中创建一个字典,但我如何调整它以获取固定变量?
什么有效:
countries = ["Italy", "Germany", "Spain", "USA", "Switzerland"]
dishes = ["pizza", "sauerkraut", "paella", "Hamburger"]
country_specialities = zip(countries,dishes)
我需要什么:
dishes = ["pizza", "sauerkraut", "paella", "Hamburger"]
country = "uk"
输出:
menu = ["pizza": "uk", "sauerkraut": "uk", "paella": "uk", "Hamburger", "uk"]
答案 0 :(得分:6)
{dish: country for dish in dishes}
答案 1 :(得分:5)
您可以在此处使用dict.fromkeys()
class method:
dict.fromkeys(dishes, country)
请注意,不使用此选项时默认值是可变值(除非您打算在所有键中共享该可变值)。
来自文档:
使用 seq 中的键创建一个新词典,并将值设置为 value 。
fromkeys()
是一个返回新字典的类方法。 value 默认为None
。
这比使用词典理解要快;循环遍历dishes
完全在C代码中完成,而字典理解将在Python字节码中执行循环。
如果你的列表包含200.000个值,那么这会产生很大的不同:
>>> from timeit import timeit
>>> import random
>>> from string import ascii_lowercase
>>> values = [''.join([random.choice(ascii_lowercase) for _ in range(random.randint(20, 40))]) for _ in range(200000)]
>>> def dictcomp(values):
... return {v: 'default' for v in values}
...
>>> def dictfromkeys(values):
... return dict.fromkeys(values, 'default')
...
>>> timeit('f(values)', 'from __main__ import values, dictcomp as f', number=100)
4.984026908874512
>>> timeit('f(values)', 'from __main__ import values, dictfromkeys as f', number=100)
4.159089803695679
当重复操作100次时,这几乎是两个选项之间的差异。
答案 2 :(得分:2)
你可以这样做:
dishes = ["pizza", "sauerkraut", "paella", "Hamburger"]
country = "uk"
menu = dict((dish, country) for dish in dishes)
答案 3 :(得分:1)
使用zip
In [54]: dict(zip(dishes, [country] * len(dishes)) )
Out[54]: {'Hamburger': 'uk', 'paella': 'uk', 'pizza': 'uk', 'sauerkraut': 'uk'}