2012-06-06 198 views
1

a = [{43:123}, {3:103}, {36:103}, {2:102}, {23:100}]交換一個元素列表爲int

我怎樣才能提取ID從它當每個鍵是ID和值表示的多個點。 我試圖用這個:

Python的結果是一個列表,但我需要整數類型。例如 print a[2].keys()結果[36]和我需要36是int。 THX

+1

我想你的意思'的項目中:打印item.keys [0]'' –

+3

我+ = 1' - >它不是C++ ..沒有必要的 – WeaselFox

+0

@JoelCornett不,他想要鑰匙。此外,a不是字典,也沒有.items()方法 – HodofHod

回答

3

訪問從該名單的第一個元素:

a[2].keys()[0] 

next(a[2].iterkeys()) 

都返回INT 36

要獲得所有鍵的列表:

[next(d.iterkeys()) for d in a] 

返回[43, 3, 36, 2, 23]

也許你應該你的類型的字典的列表轉換成一個簡單的字典:

d = {} 
for x in a: 
    d.update(x) 

獲得{2: 102, 3: 103, 23: 100, 36: 103, 43: 123},在那裏你可以通過簡單的d.keys()獲得所有密鑰並獲得[3, 2, 43, 36, 23],但順序並不守恆。

0

正如我在給你的另一個問題的評論作出迴應,這是你想要什麼:

嘗試:

for b in a: 
    print b.keys()[0] 

,將提取的鑰匙,所以你最終會打印出:43, 3,36,2,23。如果您想要的值(如123,103,36,102,100),請使用b.values()[0]

0

如果你有一個結果列表[36]和你想獲得的項目,只需下標元素0

即只追加[0]你的表達式,得到了你[36]去列表中的第一個(也是唯一的)項目。

所以,你的情況:

print a[2].keys()[0] 
1

你有類型的字典列表,因此keys方法會給你的字典的鑰匙,因爲它們都只有一個入口,使用[0]引用它:

>>> [d.keys()[0] for d in a] 
[43, 3, 36, 2, 23] 
0

試試這個:

def getKeyAtIndex(a, idx): 
    return a[idx].keys()[0] 

,並調用它是這樣的:

print getKeyAtIndex(a, 2) 
> 36 

作爲一個側面說明 - 這就是你已經張貼具有相同數據結構中的第二個問題 - 字典列表,其中每個字典保持了與單個值的單個密鑰。這沒有多大意義,在這種情況下,你通過使用字典沒有任何好處。也許單個字典會是一個更好的主意?像這樣:

{43:123, 3:103, 36:103, 2:102, 23:100} 

或者可能是元組列表?像這樣:

[(43, 123), (3, 103), (36, 103), (2, 102), (23, 100)] 
2
>>> [next(iter(d)) for d in a] 
[43, 3, 36, 2, 23] 
+0

+1,我也是這麼說的。這是一個非常乾淨的方法。 – senderle