繁体   English   中英

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

[英]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可能有助于弄清楚发生了什么。 您的代码实际上是迭代ab并从dict中为ab的每个元素打印相应的值。 它执行的次数与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

如果ab中有很多元素,将它们转换为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.

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