[英]Print dictionary values with list DB using Python
I have a dictionary of values like this:我有一个这样的值字典:
indicator_keys = {
'i2': 'bla bla',
'i4': 'bla bla bla',
'i5': 'bla bla bla bla',
'i6': 'bla bla bla bla bla'
}
and I have a list like this:我有一个这样的列表:
a = ['i2','i4','i5','i6','i15']
b = ['i6','i3','i10','i6','i15']
I want to run a loop that will go through the dictionary and match if the item from my list matches one of the key to print the proper value but every loop I try even if there is only 1 match will prints the same sentence as the length of the WHOLE list (for example if only i2
matched he will print the value 5 times because of the For loop) this is my code so far:我想运行一个循环,它将通过字典 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)])
Try this will work试试这个会工作
for d in indicator_keys:
if d in a or d in b:
print(d, indicator_keys[d])
You don't need the inner for
loops when you're also using the in
operator.当您还使用
in
运算符时,您不需要内部for
循环。 Adding an additional print
might help figure out what is happening.添加额外的
print
可能有助于弄清楚发生了什么。 Your code is actually iterating a
and b
and printing the corresponding values from the dict
for every element of a
and b
.您的代码实际上是迭代
a
和b
并从dict
中为a
和b
的每个元素打印相应的值。 And it does it as many times as the number of keys in the dict
.它执行的次数与
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
Getting rid of the inner for
loops should make it work as expected:摆脱内部
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
If you have a lot of elements in a
and b
, it might make sense to convert them to set
.如果
a
和b
中有很多元素,将它们转换为set
可能是有意义的。
simplified with list comprehension:用列表理解简化:
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.