字典来自2个列表和范围?

时间:2018-02-15 19:46:52

标签: python

我在尝试从2个列表创建字典时遇到了一些问题。

我正在尝试将此作为输出。

{1: {'name1', 'age1'}, 2: {'name2', 'age2'}, 3: {'name3', 'age3'}}

我目前的代码:(我是新编码所以这是一个混乱而且非常有效,是的,我确实知道我运行的代码低于5次)

def Update():
    for r in range(1,5):
        v1list.append(StringVar())
        v2list.append(StringVar())
        NameEntry = Entry(root, textvariable=v1list[r-1]).grid(row = r, column = 0, sticky=W)
        AgeEntry = Entry(root, textvariable=v2list[r-1]).grid(row = r, column = 4, sticky=W)
        for var1, var2 in ((a,b) for a in v1list for b in v2list):
            UserInput[r] = {var1.get(), var2.get()}
            print(UserInput)

输出继续向前推送var1和var2,从而产生输出:

{1: {''}, 2: {''}, 3: {''}, 4: {''}}

我确实看到了所有输入,他们只是继续在字典中前进。

2 个答案:

答案 0 :(得分:2)

尝试通过dictionary comprehension

创建字典
names = ['name1', 'name2', 'name3']
ages = ['age1', 'age2', 'age3']

name_age_dict = {i+1:{names[i],ages[i]} for i in range(len(names))}

>>> name_age_dict
{1: {'age1', 'name1'}, 2: {'name2', 'age2'}, 3: {'age3', 'name3'}}

它比for循环更干净,并且仍然可读。基本上,它遍历列表中的每个项目(假设列表具有相同的长度),并为每个列表中的每个项目创建{name, age}字典,分配索引号(+1跳过0)作为该词典的关键。

一些新的python用户在使用list和dict理解语法时遇到困难,所以如果你更喜欢将它看作循环,那么就可以实现同样的目的:

name_age_dict = {}

for i in range(len(names)):
    name_age_dict[i+1] = {names[i], ages[i]}

>>> name_age_dict
{1: {'age1', 'name1'}, 2: {'name2', 'age2'}, 3: {'age3', 'name3'}}

答案 1 :(得分:0)

希望这能解决您的问题。

    d = {}
    names=['name1','name2','name3','name4','name5']
    age=[1,2,3,4,5]
    for i in range(1,6):
        d[str(i)]={}
        d[str(i)][names[i-1]]=age[i-1]
    print(d)