循环遍历包含字典的嵌套列表

时间:2014-03-31 15:19:23

标签: python loops dictionary

如果元素匹配,我怎么能在下面循环n,并获取e中的字典元素。

e = [(1001, 7005, {'length': 0.35, 'modes': 'cw', 'type': '99', 'lanes': 9}),
     (1002, 8259, {'length': 0.35, 'modes': 'cw', 'type': '99', 'lanes': 9}), (1001, 14007, {'length': 0.35, 'modes': 'cw', 'type': '99', 'lanes': 9})]

n = [[(1001, 7005), (3275, 8925)], [(1598, 6009), (1001, 14007)]]

即比较n,如果n在e中打印字典

b = []
for d in n:
    for items in d:
        print b
结果应该是

output = [[{'length': 0.35, 'modes': 'cw', 'type': '99', 'lanes': 9}],[{'length': 0.35, 'modes': 'cw', 'type': '99', 'lanes': 9}]]

3 个答案:

答案 0 :(得分:1)

您可以将e列表转换为字典,使用字典理解,就像这样

f = {(v1, v2):v3 for v1, v2, v3 in e}

然后,我们可以展平n并检查每个元素是否都在f中。如果它存在,那么我们可以获得与f相对应的值,如此

from itertools import chain
print [f[item] for item in chain.from_iterable(n) if item in f]

<强>输出

[{'lanes': 9, 'length': 0.35, 'modes': 'cw', 'type': '99'},
 {'lanes': 9, 'length': 0.35, 'modes': 'cw', 'type': '99'}]

答案 1 :(得分:1)

您需要从e列表和flatten n元组列表中创建映射(字典)到元组列表:

e = [(1001, 7005, {'length': 0.35, 'modes': 'cw', 'type': '99', 'lanes': 9}),
     (1002, 8259, {'length': 0.35, 'modes': 'cw', 'type': '99', 'lanes': 9}),
     (1001, 14007, {'length': 0.35, 'modes': 'cw', 'type': '99', 'lanes': 9})]

n = [[(1001, 7005),(3275, 8925)], [(1598,6009),(1001,14007)]]

d = {(item[0], item[1]): item[2] for item in e}
n = [item for sublist in n for item in sublist]

print [d[item] for item in n if item in d]

打印:

[{'lanes': 9, 'length': 0.35, 'type': '99', 'modes': 'cw'}, 
 {'lanes': 9, 'length': 0.35, 'type': '99', 'modes': 'cw'}]

答案 2 :(得分:0)

您可以使用列表理解:

[e1[2] for e1 in e for n1 in n for n2 in n1 if (e1[0]==n2[0] and e1[1]==n2[1])]

输出:

[{'lanes': 9, 'length': 0.35, 'type': '99', 'modes': 'cw'}, 
 {'lanes': 9, 'length': 0.35, 'type': '99', 'modes': 'cw'}]