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



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

[['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

注意:没有理由在这里使用forfromkeys的内部循环;您只是首先添加了整个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))

最新更新