什么是使用(元素)列表作为字典中的键的Pythonic方法?

时间:2012-11-20 16:20:53

标签: python list dictionary

鉴于清单:

keys = ['Orange','Blue','Green']

和字典

colors = {}

使用keys colors作为for key in keys: colors[key] = [] 的键的最Pythonic方法是什么?我目前正在做以下事情,但想知道是否有更好的使用Python的方法。

keys

编辑:最初问的问题是“使用colors作为{{1}}的密钥的最Pythonic方式”,但随后的代码段表明实际需要的内容是一种使用其元素的方法。

3 个答案:

答案 0 :(得分:7)

你可以使用dict comprehensions:

In [1]: keys = ['Orange', 'Blue', 'Green']

In [2]: colors={key: [] for key in keys}

In [3]: colors
Out[3]: {'Blue': [], 'Green': [], 'Orange': []}

for python 2.6:

In [4]: colors = dict((key, []) for key in keys)

In [5]: colors
Out[5]: {'Blue': [], 'Green': [], 'Orange': []}

答案 1 :(得分:6)

如果订单很重要,请使用tuple

In [113]: keys = ['Orange','Blue','Green']

In [114]: colors = {}

In [115]: colors[tuple(keys)] = 0

In [116]: colors
Out[116]: {('Orange', 'Blue', 'Green'): 0}

如果订单无关紧要,请使用frozensetfrozenset本质上为您提供了一个可清除的set,它无法修改,但具有set(O(1)查找等)的所有优点

In [117]: colors = {}

In [118]: colors[frozenset(keys)] = 0

In [119]: colors
Out[119]: {frozenset(['Orange', 'Blue', 'Green']): 0}

如果您希望keys中的每个元素都成为colors中的关键字:

In [120]: colors = {k:[] for k in keys}

In [121]: colors
Out[121]: {'Blue': [], 'Green': [], 'Orange': []}

答案 2 :(得分:6)

如上所述的Dict理解是要走的路。为了显示替代方案,如果要使用列表进行实例化,还可以将defaultdictfromkeys结合使用:

In [1]: from collections import defaultdict

In [2]: keys = ['Orange','Blue','Green']

In [3]: colors = defaultdict.fromkeys(keys, list)

In [4]: colors['Orange']
Out[4]: <type 'list'>