是否可以通过一个字典理解提取两个值?
Is it possible to extract two values with one Dictionary comprehension?
通过这样的列表理解,可以从字典列表中的键中提取特定值:
ke = [d['_text'] for d in ls if '_text' in d]
是否可以一次提取两个值并将它们存储为一个列表压缩的元组?
所以像这样:
ke = [(d['_text'] + e['url']) for (d,e) in ls if '_text', 'url' in d,e]
编辑:请原谅我没有发布示例:
ls =[{'_text': 'hello', 'url': 'xxx-444.html'}, {'_text': 'bye', 'url': 'xxx-222.html'}]
期望输出:
ke = [('hello', 'xxx-444.html'), ('bye', 'xxx-222.html')]
当然可以。
ke = [(d['_text'], e['url']) for d in ls for e in ls if '_text' in d and 'url' in e]
尽管这在概念上应该可行,但请分享一个可验证的示例。
试试这个:
>>> ls =[{'_text': 'hello', 'url': 'xxx-444.html'}, {'_text': 'bye', 'url': 'xxx-222.html'}]
>>> ke = [(d.get('_text'), d.get('url')) for d in ls]
>>> ke
[('hello', 'xxx-444.html'), ('bye', 'xxx-222.html')]
即使 '_text'
和 'url'
键不在任何字典中,它也可以处理,在这种情况下,NoneType
将被添加到元组中。对于以下情况,最后一个字典不包含 'url'
键,None
代替了它:
>>> ls =[{'_text': 'hello', 'url': 'xxx-444.html'}, {'_text': 'bye', 'url': 'xxx-222.html'}, {'_text' : 'world'}]
>>> ke = [(d.get('_text'), d.get('url')) for d in ls]
>>> ke
[('hello', 'xxx-444.html'), ('bye', 'xxx-222.html'), ('world', None)]
通过这样的列表理解,可以从字典列表中的键中提取特定值:
ke = [d['_text'] for d in ls if '_text' in d]
是否可以一次提取两个值并将它们存储为一个列表压缩的元组?
所以像这样:
ke = [(d['_text'] + e['url']) for (d,e) in ls if '_text', 'url' in d,e]
编辑:请原谅我没有发布示例:
ls =[{'_text': 'hello', 'url': 'xxx-444.html'}, {'_text': 'bye', 'url': 'xxx-222.html'}]
期望输出:
ke = [('hello', 'xxx-444.html'), ('bye', 'xxx-222.html')]
当然可以。
ke = [(d['_text'], e['url']) for d in ls for e in ls if '_text' in d and 'url' in e]
尽管这在概念上应该可行,但请分享一个可验证的示例。
试试这个:
>>> ls =[{'_text': 'hello', 'url': 'xxx-444.html'}, {'_text': 'bye', 'url': 'xxx-222.html'}]
>>> ke = [(d.get('_text'), d.get('url')) for d in ls]
>>> ke
[('hello', 'xxx-444.html'), ('bye', 'xxx-222.html')]
即使 '_text'
和 'url'
键不在任何字典中,它也可以处理,在这种情况下,NoneType
将被添加到元组中。对于以下情况,最后一个字典不包含 'url'
键,None
代替了它:
>>> ls =[{'_text': 'hello', 'url': 'xxx-444.html'}, {'_text': 'bye', 'url': 'xxx-222.html'}, {'_text' : 'world'}]
>>> ke = [(d.get('_text'), d.get('url')) for d in ls]
>>> ke
[('hello', 'xxx-444.html'), ('bye', 'xxx-222.html'), ('world', None)]