将多个列表转换为单个字典

3
我有一个循环函数,会打印许多任意数量的独立列表。
例如: 编辑:这是我运行函数时得到的输出。
['Hello', 'Mello', 'Jello']
['Sun', 'Fun', 'Run']
['Here', 'There', 'Everywhere'}

现在我想将这些任意分开的列表转换为字典,如下所示:
{'Hello':['Sun','Here'], 'Mello':['Fun', 'There'], 'Jello':['Run', 'Everywhere']}

将第一个列表中的每个元素变成“键”,并将下面的所有元素变成“值”(或者是反过来?)...

我尝试的方法是:

{k:v for k, *v in zip(*data)}

但是当我这样做时,输出结果类似于这样:
{'1': ('T', 'P', '2'), '7': ('a', '.', '6'), '9': ('t', 'r', '8')}
{'0': ('h', 'L', '1'), '2': ('T', 'N', '1')}
{'0': ('o', 'V', '0'), '2': ('T', 'B', '1')}

P.S these are separate lists - user3029969
2
问题出在你的数据上,这个方法本身是没有问题的。 - aIKid
rowdata 有什么关系? - John La Rooy
2个回答

3
>>> L1 = ['Hello', 'Mello', 'Jello']
>>> L2 = ['Sun', 'Fun', 'Run']
>>> L3 = ['Here', 'There', 'Everywhere']
>>> {k:v for k, *v in zip(L1, L2, L3)}
{'Hello': ['Sun', 'Here'], 'Mello': ['Fun', 'There'], 'Jello': ['Run', 'Everywhere']}

不清楚您在 data 中具体包含了什么,但这个方案可以正常运行。

>>> data = [L1, L2, L3]
>>> {k:v for k, *v in zip(*data)}
{'Hello': ['Sun', 'Here'], 'Mello': ['Fun', 'There'], 'Jello': ['Run', 'Everywhere']}

其他选项包括:
>>> dict(map(lambda k, *v:(k, v), *data))
{'Hello': ('Sun', 'Here'), 'Mello': ('Fun', 'There'), 'Jello': ('Run', 'Everywhere')}



>>> dict(map(lambda k, *v:(k, list(v)), *data))
{'Hello': ['Sun', 'Here'], 'Mello': ['Fun', 'There'], 'Jello': ['Run', 'Everywhere']}

数据是:(对于文件中的数据) - user3029969
问题是...循环结束后,我无法将我的列表命名为L1、L2、L3。有没有办法可以做到呢? - user3029969
@user3029969,你没有展示给我们你是如何读取文件的。这似乎是你的问题所在。你能把它添加到问题中吗? - John La Rooy
标签并不重要,data 的结构才是重要的,而你并没有展示给我们看。 - John La Rooy
我在 *v 上得到无效语法。它是什么意思,为什么会出错?(我使用的是2.7.5) - KGo
显示剩余4条评论

0

你可以做的一件事情是像这样:

myLists = [ #lists you want to convert
    ['Hello', 'Mello', 'Jello']        
    ['Sun', 'Fun', 'Run']              
    ['Here', 'There', 'Everywhere']    
]
theDict = {} #where you will store the converted lists
for list in myLists: #for each list...
    theDict[list[0]] = list[1:] #set the dict's key to list[0] and contents to everything starting from index 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接