在不知道密钥的情况下访问python dict()的值

时间:2014-02-17 03:51:17

标签: python dictionary

我有一本字典列表的字典。如下所示:

x = {'a':[{'p':1, 'q':2}, {'p':4, 'q':5}], 'b':[{'p':6, 'q':1}, {'p':10, 'q':12}]}

列表(值)的长度对于dict x的所有键都是相同的。 我想获得任何一个值的长度,即列表,而不必通过明显的方法 - >获取密钥,使用len(x [keys [0]])来获取长度。

我现在的代码:

val = None
for key in x.keys():
    val = x[key]
    break
    #break after the first iteration as the length of the lists is the same for any key
try:
    what_i_Want = len(val)
except TypeError:
    print 'val wasn't set'

我对此并不满意,我相信可以制作更多'pythonic'。

5 个答案:

答案 0 :(得分:5)

这是最有效的方法,因为我们不会创建任何中间列表。

print len(x[next(iter(x))])   # 2

注意:要使此方法有效,字典中至少应包含一个键。

答案 1 :(得分:4)

这个怎么样:

val = x[x.keys()[0]]

或者:

val = x.values()[0]

然后你的回答是

len(val)

其他一些解决方案(由thefourtheye和gnibbler发布)更好,因为它们没有创建中间列表。我将此响应添加为一个易于记忆且显而易见的选项,而非时间效率使用的解决方案。

答案 2 :(得分:4)

在Python2或Python3中正常工作

>>> x = {'a':[{'p':1, 'q':2}, {'p':4, 'q':5}], 'b':[{'p':6, 'q':1}, {'p':10, 'q':12}]}
>>> next(len(i) for i in x.values())
2

这对Python2来说更好,因为它避免了列出值。在Python3中运行良好

>>> next(len(x[k]) for k in x)
2

答案 3 :(得分:2)

使用nextiter

>>> x = {'a':[{'p':1, 'q':2}, {'p':4, 'q':5}], 'b':[{'p':6, 'q':1}, {'p':10, 'q':12}]}
>>> val = next(iter(x.values()), None) # Use `itervalues` in Python 2.x
>>> val
[{'q': 2, 'p': 1}, {'q': 5, 'p': 4}]
>>> len(val)
2

>>> x = {}
>>> val = next(iter(x.values()), None) # `None`: default value
>>> val is None
True

答案 4 :(得分:0)

>>> x = {'a':[{'p':1, 'q':2}, {'p':4, 'q':5}], 'b':[{'p':6, 'q':1}, {'p':10, 'q':12}]}
>>> len(x.values()[0])
2

这里,x.values为您提供了所有值的列表,然后您可以从中获取任何一个值的长度。

相关问题