2012-08-16 91 views
1

我有一本字典:Python的列表中的一個給定的元素之前的目標元素

d = {'a': ['Thing', 'City', 10], 'b': ['Thing' ,'City', 5]} 

等和num = 10

我想通過字典和檢查,看看是否NUM相匹配與字典列表中的任何其他數字相關聯。如果是這樣,我要搶號前的2個元素,並將所有3

因此,例如,在這種情況下,由於num = 10a10,它應該返回['Thing', 'City' 10]

到目前爲止,我有這樣的:

for i in d.keys(): # goes through the dictionary 
    for item in d[i]: 
     if type(item) == int: # if the item is an int 
      if num = item: 
       l.append(item) 
       #l.append the items before it 

我想我的問題則歸結爲:如何在列表中給定的元素之前獲得的物品?所以在這種情況下,我有10個,但也想要事情和城市。

謝謝!

回答

2

嘗試這樣:

for key, item in d.items(): 
    for idx, subitem in enumerate(item): 
    if isinstance(subitem, int) and subitem == num: 
     l.extend(subitem[idx-2:idx+1]) 
2

使用in關鍵字簡單的事情。

def get_list(num, d): 
    for lst in d.values(): 
     if num in lst: 
      return(lst) #or do whatever you want with the list 

例子:

d = {'a': ['Thing', 'City', 10], 'b': ['Thing' ,'City', 5]} 
get_list(10, d) 
>>> ['Thing', 'City', 10] 
get_list(5,d) 
>>> ['Thing', 'City', 5] 
+0

對不起,我不只是想要列表返回,我要在號碼前訪問元素,所以東西升ike lst [num-1]或其他東西(儘管這不起作用) – user1530318 2012-08-16 21:23:49

0

如果只是d的價值的最後一個元素進行比較,並有可能會多次出現......(這並不做一個隱式類型檢查雖然)...

matching = [k for k,v in d.iteritems() if v[-1] == 10] 
for k in matching: 
    print k, d[k] 
0
result = [v for v in d.itervalues() if v[2] == num] 
相關問題