2017-06-04 50 views
0

我在Python 2.7中使用字典。iteritems:匹配k值較低/較高和較大的空格

下面是代碼:

d = {} 
with open('input') as f: 
    for line in f: 
     if ":" not in line: 
      continue 
     key, value = line.strip().split(":", 1) 
     d[key] = value 

for k, v in d.iteritems(): 
    if k == 'items': 

在輸入文件中,他們提到了一些時間「項」象下面這樣:

items: 
Items: 
ITEMS: 
    Items : 

我想匹配在我的代碼上述所有的,現在是我正在使用

k == "items": 

如果「項目」是大寫或有空格,這不起作用。

請幫助修復我的腳本。

+0

你有什麼用''items''鍵值做 -

我們可以dict.setdefault方法

d = {} with open('test.txt') as f: for line in f: if ":" not in line: continue key, value = line.strip().split(":", 1) key = key.lower().strip() d.setdefault(key, []).append(value) values = d['items'] # or use 'd.get('items', [])' if there may not be 'items' key # do work with multiple values 

dict擴展做到這一點? –

回答

4

重新定義k以小寫並刪除空白與

k = k.lower().strip() 
2

可以使用str.stripstr.lower方法:如果你需要處理類似鍵的值

d = {} 
with open('test.txt') as f: 
    for line in f: 
     if ":" not in line: 
      continue 
     key, value = line.strip().split(":", 1) 
     d[key] = value 

for k, v in d.iteritems(): 
    if k.lower().strip() == 'items': 
     # do work with single value 

,它可能是一個好主意將它們收集到listd對象創建步驟中。 defaultdict

from collections import defaultdict 

d = defaultdict(list) 
with open('test.txt') as f: 
    for line in f: 
     if ":" not in line: 
      continue 
     key, value = line.strip().split(":", 1) 
     key = key.lower().strip() 
     d[key].append(value) 

values = d['items'] 
# do work with multiple values