我正在尝试将列表列表转换为字典字典.它有效但不完美

Dra*_*rac 1 python dictionary

这是我试图转换的列表(任意数字):

[['2 4', '18', '4', '32', '2'], ['2 4', '13', '9', '12', '4'], ['3 7', '435', '2
3', '123', '4', '3', '234', '34']]
Run Code Online (Sandbox Code Playgroud)

这是它返回的字典(关闭,但不完全).注意值是如何乱序的.我需要它们与列表的顺序相同:

{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}}
Run Code Online (Sandbox Code Playgroud)

最后,这是我用来转换它的代码:

iterator = 0 
myDict = {} 

for listItem in myList: 
    for item in listItem[1:]: 
        myDict[iterator] = dict.fromkeys(listItem, 0) 
iterator +=1 
Run Code Online (Sandbox Code Playgroud)

编辑:我忘了提到我正在尝试从相应的字典中删除每个列表中的第一项.

Lil*_*ung 5

在python中,dicts本质上是无序的.这是因为它们通常通过散列表实现,散列表比简单的关联数组更有效.相反,你应该使用一个OrderedDict,就像一个字典,但也记住顺序:

from collections import OrderedDict

iterator = 0 
myDict = OrderedDict()

for listItem in myList:
    myDict[iterator] = OrderedDict.fromkeys(listItem[1:], 0)
    iterator += 1
Run Code Online (Sandbox Code Playgroud)

注意:没有理由在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
Run Code Online (Sandbox Code Playgroud)

作为最后一点,python为您提供了很好的工具,以便您可以使用生成器表达式将整个事物编写为单行,并且enumerate:

myDict = OrderedDict((i, OrderedDict.fromkeys(listItem[1:], 0))
                     for i, listItem in enumerate(myList))
Run Code Online (Sandbox Code Playgroud)