我在Python中有一个列表:
['first', 'second', 'foo']
我想创建一个以列表元素命名的列表列表:
newlist = ['first':[], 'second':[], 'foo':[]]
我看到了一些使用字典的建议,但是当我尝试使用OrderedDict进行操作时,我丢失了创建中元素的顺序。
谢谢。
答案 0 :(得分:3)
您可以使用方法fromkeys()
:
l = ['first', 'second', 'foo']
dict.fromkeys(l, [])
# {'first': [], 'second': [], 'foo': []}
在Python 3.6及更低版本中,使用OrderedDict
代替dict
:
from collections import OrderedDict
l = ['first', 'second', 'foo']
OrderedDict.fromkeys(l, [])
# OrderedDict([('first', []), ('second', []), ('foo', [])])
答案 1 :(得分:1)
由于订购了Python 3.7常规Python的dict
:
>>> dict((name, []) for name in ['first', 'second', 'third'])
{'first': [], 'second': [], 'third': []}
CPython 3.6中的 dict
也是有序的,但这是实现细节。
答案 2 :(得分:1)
@ForceBru对于Python 3.7(我了解到自己)给出了一个很好的答案,但是对于可以使用的较低版本:
from collections import OrderedDict
l = ['first', 'second', 'foo']
d = OrderedDict([(x, []) for x in l])
答案 3 :(得分:1)
您最终想要拥有的数组中的元素必须是正确的对象,并且在示例中显示的格式没有多大意义,但是您可以尝试使用dictionary
元素在数组中,每个元素都有键(ei 'foo'
)和值(即'[]'
)。因此,您将以如下形式结束:
newlist = [{'first':[]}, {'second':[]}, {'foo':[]}]
现在,如果您对此感到满意,这是一个带有匿名map
函数的lambda
函数,它将转换您的初始数组:
simplelist = ['first', 'second', 'foo']
newlist = list(map(lambda item: {item:[]}, simplelist))
希望,您得到了答案。
干杯!
答案 4 :(得分:1)
您指定的结构是字典dict
。结构如下:
test_dictionary = {'a':1, 'b':2, 'c':3}
# To access an element
print(test_dictionary['a']) # Prints 1
根据您的要求创建字典:
test_dictionary = dict((name, []) for name in ['first', 'second', 'foo'])
print(test_dictionary)
上面的代码行给出以下输出:
{'first': [], 'second': [], 'foo': []}
答案 5 :(得分:1)
第一个问题是您使用术语“列表”,但是您将其表示为单词概念,而不是Python语言中的数据类型。第二个问题是结果将不再代表数据类型<list>
,而是代表<dict>
(字典)的数据类型。简单的单行for
可以将变量类型<list>
转换为所需的字典类型变量。它适用于Python 2.7.x
>>> l = ['first', 'second', 'foo']
>>> type(l)
<type 'list'>
>>> d = {x:[] for x in l}
>>> type(d)
<type 'dict'>
>>> d
{'second': [], 'foo': [], 'first': []}