是否有一种方法来使用临时列表变量内嵌套字典理解?



我的字典是这样的:

ranked_imgs = {'d57b26aa-c8f8-4e08-9e8f-8aecd6e952a5': {'small': [],
'medium': [['https://www.pablo-ruiz-picasso.net/images/works/261.jpg', 1]],
'large': []},
'b10ecfdb-f590-4930-9975-aa12dc267f2f': {'small': [],
'medium': [],
'large': [['https://www.pablo-ruiz-picasso.net/images/works/3936.jpg', 1]]},......}

这就是我试图使用字典理解做的事情,但它失败了,因为临时列表由于for循环而被重载:

dct = {k:[x for x in vv] for k,v in ranked_imgs.items() for vk,vv in v.items()}

或者像这样的:

dct = {k:sum(vv,[]) for k,v in ranked_imgs.items() for vk,vv in v.items()}

下面的代码看起来是这样的:

# ranked_imgs_={}
# for k,v in ranked_imgs.items():
#     lst = []
#     for vk,vv in v.items():
#         for url in vv:
#             lst.append(url)
#     ranked_imgs_[k] = lst

我很想知道是否有一种python的方法可以使用字典理解来做到这一点!

预期的输出是一个列表的字典,因此可以使用列表推导式作为字典推导式的输出值。还要注意,您可以迭代v.values()而不是v.items(),因为您不使用密钥(感谢@MechanicPig指出这一点):

dct = {k: [url for vv in v.values() for url in vv] for k, v in ranked_imgs.items()}

使用chain.from_iterable可能比@blhsing的答案好一点,它通过连接v.values()来迭代:

from itertools import chain
result = {k: list(chain.from_iterable(v.values())) for k, v in ranked_imgs.items()}

最新更新