2012-06-06 199 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