python:根据列出的元组的条件构造列出的字典

时间:2016-11-12 12:13:33

标签: python list if-statement dictionary for-loop

这个元组列表:

items = [('Value1','Value2','Value3'),('Value4','Value5','Value6'),('Value7','Value8','Value9')]

我已经制作了一个“for”循环来列出词典:

final_list = []

for string1, string2, string3 in items:

    item_data = ({'key1': string1, 'key2': string2, 'key3': string3})
    final_list.append(item_data)

print final_list

,结果如下:

[{'key1': Value1, 'key2': Value2, 'key3': Value3},{'key1': Value4, 'key2': Value5, 'key3': Value6}...]

我想要实现的是根据key1,value1(string1)对的条件插入另一个键值对。

我将此条件放在上面的for循环中:

if 'Value1' or 'Value4' in string1:
    string4 = 'somevalue1'
elif 'Value7' or 'Value8' in string1:
    string4 = 'somevalue2'
else:
    string4 = ''

然后将字典改为如下:

item_data = ({'key1': string1, 'key2': string2, 'key3': string3, 'key4': string4})

但是我没有得到我的预期,而是得到了这个:

[{'key1': Value1, 'key2': Value2, 'key3': Value3, 'key4': 'somevalue1'},{'key1': Value4, 'key2': Value5, 'key3': Value6, 'key4': 'somevalue1'}...]

我期望key4的值根据key1(string1)的值和上面的语句填充,但不检查下一个项目。它持续存在'somevalue1'。

1 个答案:

答案 0 :(得分:0)

我将所有作品放在一起然后一切正常

items = [('Value1','Value2','Value3'),('Value4','Value5','Value6'),('Value7','Value8','Value9')]
final_list = []

for string1, string2, string3 in items:
    if 'Value1' in string1:
        string4 = 'somevalue1'
    elif 'Value2' in string1:
        string4 = 'somevalue2'
    else:
        string4 = ''
    item_data = ({'key1': string1, 'key2': string2, 'key3': string3, 'key4': string4})
    final_list.append(item_data)

print final_list

输出:

[{'key4': 'somevalue1', 'key1': 'Value1', 'key2': 'Value2', 'key3': 'Value3'}, {'key4': '', 'key1': 'Value4', 'key2': 'Value5', 'key3': 'Value6'}, {'key4': '', 'key1': 'Value7', 'key2': 'Value8', 'key3': 'Value9'}]

更新(由于您已更新问题)

条件问题

因为if 'Value1' or 'Value4' in string1:等于if ('Value1') or ('Value4' in string1):这始终是True,因为只有空字符串False

为了使您的代码有效,请更改条件块:

if string1 in ('Value1', 'Value4'):
    string4 = 'somevalue1'
elif string1 in ('Value7', 'Value8'):
    string4 = 'somevalue2'
else:
    string4 = ''