这是我想转换的列表(任意数字):
[['2 4', '18', '4', '32', '2'], ['2 4', '13', '9', '12', '4'], ['3 7', '435', '2
3', '123', '4', '3', '234', '34']]
这是它返回的字典(接近,但不完全)。注意这些值是如何乱序的。我需要它们与列表的顺序相同:
{0: {'2': 0, '18': 0, '32': 0, '2 4': 0, '4': 0}, 1: {'9': 0, '13': 0, '12': 0,
'2 4': 0, '4': 0}, 2: {'23': 0, '34': 0, '3': 0, '123': 0, '4': 0, '234': 0, '43
5': 0, '3 7': 0}}
最后,这里是我用来转换它的代码:
iterator = 0
myDict = {}
for listItem in myList:
for item in listItem[1:]:
myDict[iterator] = dict.fromkeys(listItem, 0)
iterator +=1
我忘了说,我正试图把每个列表的第一个条目从对应的字典中删除。 在python中,字典本身是无序的。这是因为它们通常是通过哈希表实现的,这比简单的关联数组更有效。相反,您应该使用OrderedDict
,它的作用就像字典一样,但也记住顺序:
from collections import OrderedDict
iterator = 0
myDict = OrderedDict()
for listItem in myList:
myDict[iterator] = OrderedDict.fromkeys(listItem[1:], 0)
iterator += 1
注意:没有理由在这里使用for
和fromkeys
的内部循环;您只是首先添加了整个listItem
列表,因为您根本没有使用item
。如果你想使用item
,你必须这样做,没有fromkeys
,只使用普通赋值:
from collections import OrderedDict
iterator = 0
myDict = OrderedDict()
for listItem in myList:
myDict[iterator] = OrderedDict()
for item in listItem[1:]
myDict[iterator][item] = 0
iterator += 1
最后需要说明的是,python为您提供了很好的工具,因此您可以使用生成器表达式和enumerate
将整个内容写成一行代码:
myDict = OrderedDict((i, OrderedDict.fromkeys(listItem[1:], 0))
for i, listItem in enumerate(myList))