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:
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. Adding an additional print
might help figure out what is happening. Your code is actually iterating a
and b
and printing the corresponding values from the dict
for every element of a
and b
. And it does it as many times as the number of keys in the 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:
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
.
simplified with list comprehension:
keys = [item for item in indicator_keys if (item in a) or (item in b)]
print(keys)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.