这是我尝试转换的列表(任意数字):
[['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
编辑:我忘了提到我试图从相应的字典中删除每个列表中的第一个项目。
答案 0 :(得分:5)
在python中,dicts本质上是无序的。这是因为它们通常通过hash tables实现,这比简单的关联数组更有效。相反,你应该使用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))