3

鉴于列表:

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

和字典

colors = {}

keys使用(的元素)作为键的最 Pythonic 方式是colors什么?我目前正在执行以下操作,但想知道是否有比这更好的使用 Python 的方法。

for key in keys:
    colors[key] = []

编辑:该问题最初要求“使用最 Pythonic 的方式keys作为键colors”,但随后的代码片段表明实际需要的是一种使用其元素的方式。

4

3 回答 3

7

你可以使用 dict 理解:

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

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

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

对于python 2.6:

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

In [5]: colors
Out[5]: {'Blue': [], 'Green': [], 'Orange': []}
于 2012-11-20T16:22:57.453 回答
6

上面提到的字典理解是要走的路。为了显示替代方案,如果要使用列表实例化,还可以defaultdict结合使用 a:fromkeys

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'>
于 2012-11-20T16:23:45.950 回答
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}

如果顺序无关紧要,请使用frozenset. Afrozenset本质上为您提供了一个 hashable set,它不能被修改,但具有set(O(1) 查找等)的所有优点

In [117]: colors = {}

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

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

如果您希望 in 中的每个元素都是 inkeys中的键colors

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

In [121]: colors
Out[121]: {'Blue': [], 'Green': [], 'Orange': []}
于 2012-11-20T16:21:52.183 回答