将列表分配给字典键

2024-06-26 17:54:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有四份清单:

list1 = ["in", "france", "germany"]
list2 = ["NAMASTE", "VANAKAM"]
list3 = ["fr1", "fr2", "fr3"]
list4 = ["gem1", "gem2", "gem3", "gem4"]

我希望输出为:

[{'in': ["NAMASTE", "VANAKAM"], 'france': ["fr1", "fr2", "fr3"], 'germany': ["gem1", "gem2", "gem3", "gem4"]}]

我想不出怎么做

我能做的就是:

Lang = {}
counter = 1
for i in list1:
    counter += 1
    Lang[i] = f'list{counter}'
a = []
a.append(Lang)
print(a)

但我得到了:

[{'in': 'list2', 'france': 'list3', 'germany': 'list4'}]

如何将具有相同变量名的字符串转换为该变量,以便获得该变量的值

或任何其他方式来实现所需的输出


Tags: inlangcounterlist2francelist1germanylist3
3条回答

尝试列表理解:

list1 = ["in", "france", "germany"]
list2 = ["NAMASTE", "VANAKAM"]
list3 = ["fr1", "fr2", "fr3"]
list4 = ["gem1", "gem2", "gem3", "gem4"]


output = {list1[x]:[list2,list3,list4][x] for x in range(len(list1))}
output

{'in': ['NAMASTE', 'VANAKAM'],
 'france': ['fr1', 'fr2', 'fr3'],
 'germany': ['gem1', 'gem2', 'gem3', 'gem4']}

如果您确实想显式地“将具有相同变量名的字符串转换为该变量”,您可以编写

Lang[i] = eval(f'list{counter}')

而不是Lang[i] = f'list{counter}

然而,使用eval被认为是一种非常糟糕的做法。在其他答案中,已经发布了一些更干净的解决方案。考虑阅读这些材料:

Why is using 'eval' a bad practice?

https://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html

做你想做的事情最干净的方法是:

[dict(zip(list1, [list2, list3, list4]))]

使用代码的正确方法是(尽管我建议您使用上面的代码):

lang = {}
for i, e in enumerate(list1):
    lang[e] = eval(f'list{i + 2}')
a = [lang]
print(a)

见:How to get the value of a variable given its name in a string?

相关问题 更多 >