[英]Retrieve data from nested tuple-dictionary structure using Python list-comprehension
我有一个n元组的词典。 我想从这个包含特定键值对的元组中检索字典。
我试图尽可能优雅地做到这一点,我认为列表理解是要走的路 - 但这不是一个基本的列表理解,我有点迷失。
这显示了我正在尝试做的事情的想法,但它当然不起作用:
# 'data' is my n-tuple
# 'myKey' is the key I want
# 'myValue is the value I want
result = [data[x] for dictionary in data if (data[x][myKey]) == myValue)][0]
# which gives this error:
NameError: global name 'x' is not defined
之前,我正在尝试这样的事情(错误是有道理的,我明白了):
result = [data[x] for x in data if (data[x][myKey] == myValue)][0]
# which gives this error:
TypeError: tuple indices must be integers, not dict
这是使用嵌套理解的时候吗? 看起来会是什么样的,那么用循环和条件语写出它会更简单吗?
另外,还有一个问题 - 是否有更多的pythonic方法来获取列表中的第一个(或唯一的)元素,而不仅仅是在最后拍打[0]?
最pythonic的方式是使用next()
:
通过调用next()方法从迭代器中检索下一个项目。 如果给定default,则在迭代器耗尽时返回,否则引发StopIteration。
data = ({'1': 'test1'}, {'2': 'test2'}, {'3': 'test3'})
myKey = '2'
myValue = 'test2'
print next(x for x in data if x.get(myKey) == myValue) # prints {'2': 'test2'}
如果找不到该项,您还可以指定默认值:
myKey = 'illegal_key'
myValue = 'illegal_value'
print next((x for x in data if x.get(myKey) == myValue),
'No item found') # prints "No item found"
但接下来呢? 只需使用发电机。 我会这样做(来自alecxe的一点改变的代码):
data = ({'1': 'test1'}, {'2': 'test2'}, {'3': 'test3'})
myKey = '2'
myValue = 'test2'
result = [data[x] for x in data if data[x] == myValue]
如果你有一个名为data的词典元组,你可以这样做:
>>> data = ({'fruit': 'orange', 'vegetable':'lettuce'}, {'football':'arsenal', 'basketball':'lakers'}, {'england':'london', 'france':'paris'} )
>>> myKey = "football"
>>> myValue = "arsenal"
>>> [d for d in data if (myKey, myValue) in d.items()][0]
{'basketball': 'lakers', 'football': 'arsenal'}
这将使用list comprehension返回包含myKey
和myValue
的元组中的第一个字典(remove [0]以获取所有字典)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.