簡體   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