[英]Print dictionary values with list DB using Python
我有一个这样的值字典:
indicator_keys = {
'i2': 'bla bla',
'i4': 'bla bla bla',
'i5': 'bla bla bla bla',
'i6': 'bla bla bla bla bla'
}
我有一个这样的列表:
a = ['i2','i4','i5','i6','i15']
b = ['i6','i3','i10','i6','i15']
我想运行一个循环,它将通过字典 go 并匹配如果我的列表中的项目与打印正确值的键之一匹配,但是即使只有 1 个匹配项,我尝试的每个循环都会打印与长度相同的句子整个列表(例如,如果只有i2
匹配,由于 For 循环,他将打印该值 5 次)这是我到目前为止的代码:
for index, key in enumerate(indicator_keys):
for i in a:
if str(i) in indicator_keys:
print(indicator_keys[str(i)])
for s in b:
if str(s) in indicator_keys:
print(indicator_keys[str(s)])
试试这个会工作
for d in indicator_keys:
if d in a or d in b:
print(d, indicator_keys[d])
当您还使用in
运算符时,您不需要内部for
循环。 添加额外的print
可能有助于弄清楚发生了什么。 您的代码实际上是迭代a
和b
并从dict
中为a
和b
的每个元素打印相应的值。 它执行的次数与dict
中的键数一样多。
In [1]: indicator_keys = {'i2': 'bla bla',
...: 'i4': 'bla bla bla',
...: 'i5': 'bla bla bla bla',
...: 'i6': 'bla bla bla bla bla'}
In [2]: a = ['i2','i4','i5','i6','i15']
...: b = ['i6','i3','i10','i6','i15']
In [3]: for index, key in enumerate(indicator_keys):
...: print("--- key: {} ---".format(key))
...: for i in a:
...: if i in indicator_keys:
...: print(i, indicator_keys[i])
...: for s in b:
...: if s in indicator_keys:
...: print(s, indicator_keys[s])
...:
--- key: i2 ---
i2 bla bla
i4 bla bla bla
i5 bla bla bla bla
i6 bla bla bla bla bla
i6 bla bla bla bla bla
i6 bla bla bla bla bla
--- key: i4 ---
i2 bla bla
i4 bla bla bla
i5 bla bla bla bla
i6 bla bla bla bla bla
i6 bla bla bla bla bla
i6 bla bla bla bla bla
--- key: i5 ---
i2 bla bla
i4 bla bla bla
i5 bla bla bla bla
i6 bla bla bla bla bla
i6 bla bla bla bla bla
i6 bla bla bla bla bla
--- key: i6 ---
i2 bla bla
i4 bla bla bla
i5 bla bla bla bla
i6 bla bla bla bla bla
i6 bla bla bla bla bla
i6 bla bla bla bla bla
摆脱内部for
循环应该使其按预期工作:
In [4]: for key in indicator_keys:
...: if key in a or key in b:
...: print(key, indicator_keys[key])
...:
i2 bla bla
i4 bla bla bla
i5 bla bla bla bla
i6 bla bla bla bla bla
如果a
和b
中有很多元素,将它们转换为set
可能是有意义的。
用列表理解简化:
keys = [item for item in indicator_keys if (item in a) or (item in b)]
print(keys)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.