使用列表中的特定项创建字典

时间:2016-03-11 23:03:27

标签: python list dictionary

我正在尝试仅使用列表中的特定值创建字典。到目前为止,这是我的代码:

my_dict = {1: [1], 2: [1, 2], 3: [1, 3], 4: [1, 3, 4], 5: [1, 3, 4, 5], 6: [1, 3, 4, 5, 6]}

my_list = ([1, 1, 0], [1, 2, 100], [1, 3, 150], [1, 4, 150], [1, 5, 10], [1, 6, 20])

new_list = []
o_d = 0
# making the AON list
new_dict = {}

    for i in my_list:

    if i[0] and i[1] in my_dict:
        new_list.append(my_list[o_d][1])
        new_list.append(my_list[o_d][2])

        for key in my_dict:
            new_dict[key] = my_list[o_d][2]

        o_d += 1

    else:
        o_d += 1

print(o_d)
print(new_list)
print(new_dict)

我得到的输出是:

6
new_list [1, 0, 2, 100, 3, 150, 4, 150, 5, 10, 6, 20]
new_dict {1: 20, 2: 20, 3: 20, 4: 20, 5: 20, 6: 20}

问题是,在o_d遍历整个列表之后,我只在my_list中添加第6项的第三个值。如何添加每个o_d迭代的第三个值?

这是我预期的输出:

{1: 0, 2: 100, 3: 150, 4: 150, 5: 10, 6: 20}

2 个答案:

答案 0 :(得分:0)

这是因为你在outter for循环的每次迭代中都重写了new_dict的所有元素。您需要摆脱内部for循环并仅重写正确的new_dict值或使用.append(my_list [o_d] [2]),而不是取决于您尝试输出的内容。

另外,你知道"如果my_dict中的i [0]和i [1]:"检查i [0]是否不是空对象(例如0,[],{}等)和my_dict中的i [1],而不是i [0]和i [1]都在my_dict中?你可以移动" o_d + = 1"只要你在if和else中运行它,就会从if-else语句中分离出来。

答案 1 :(得分:0)

我解决了!

以下是代码:

my_dict = {1: [1], 2: [1, 2], 3: [1, 3], 4: [1, 3, 4], 5: [1, 3, 4, 5], 6: [1, 3, 4, 5, 6]}

my_list = ([1, 1, 0], [1, 2, 100], [1, 3, 150], [1, 4, 150], [1, 5, 10], [1, 6, 20])

new_list = []
o_d = 0
# making the AON list
new_dict = {}

for i in my_list:

    new_dict[o_d + 1] = my_list[o_d][2]

    if i[0] and i[1] in my_dict:
        new_list.append(my_list[o_d][1])
        new_list.append(my_list[o_d][2])

        o_d += 1



print(o_d)
print ("new_list", new_list)
print("new_dict", new_dict)

这是输出:

6
new_list [1, 0, 2, 100, 3, 150, 4, 150, 5, 10, 6, 20]
new_dict {1: 0, 2: 100, 3: 150, 4: 150, 5: 10, 6: 20}