在Python中从列表和固定变量创建字典

时间:2015-04-28 15:24:20

标签: python list dictionary

我正在尝试从列表和固定变量创建字典。我知道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"]

4 个答案:

答案 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'}