alg*_*thm 2 python dictionary list
我试图从列表和固定变量创建一个字典.我知道zip()可以从两个列表创建一个字典,但我怎样才能使它适应一个固定的变量呢?
什么有效:
countries = ["Italy", "Germany", "Spain", "USA", "Switzerland"]
dishes = ["pizza", "sauerkraut", "paella", "Hamburger"]
country_specialities = zip(countries,dishes)
Run Code Online (Sandbox Code Playgroud)
我需要的:
dishes = ["pizza", "sauerkraut", "paella", "Hamburger"]
country = "uk"
Run Code Online (Sandbox Code Playgroud)
要输出:
menu = ["pizza": "uk", "sauerkraut": "uk", "paella": "uk", "Hamburger", "uk"]
Run Code Online (Sandbox Code Playgroud)
你可以在这里使用dict.fromkeys()class方法:
dict.fromkeys(dishes, country)
Run Code Online (Sandbox Code Playgroud)
请注意,您应该不会在默认情况下是一个可变值,使用(除非你的意思是分享所有的按键之间是可变的值).
从文档:
使用seq中的键创建一个新字典,并将值设置为value.
fromkeys()是一个返回新字典的类方法.值默认为None.
这比使用字典理解要快; 循环dishes完全在C代码中完成,而dict理解将在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
Run Code Online (Sandbox Code Playgroud)
重复操作100次时,这几乎是两个选项之间的差异.