简体   繁体   English

使用 Python 使用列表 DB 打印字典值

[英]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 .您的代码实际上是迭代ab并从dict中为ab的每个元素打印相应的值。 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 .如果ab中有很多元素,将它们转换为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM