我有一本字典列表的字典。如下所示:
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'。
答案 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)
>>> 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为您提供了所有值的列表,然后您可以从中获取任何一个值的长度。