首页 > 解决方案 > 如何从元组列表字典的所有键中输出所有第一个元素?

问题描述

我的字典中的一个片段my_emotions如下所示:

   {'art': [(2135, ['anticipation', 'joy', 'sadness', 'surprise'])],
     'bad': [(7542, ['anger', 'disgust', 'fear', 'sadness'])],
     'beautiful': [(4000, ['joy']), (4425, ['joy'])],
     'boy': [(777, ['disgust']), (2634, ['disgust']), (4442, ['disgust'])],
     'ceremony': [(2948, ['joy', 'surprise'])],
     'child': [(4263, ['anticipation', 'joy'])],
     'detention': [(745, ['sadness']),
                   (3461, ['sadness']),
                   (3779, ['sadness']),
                   (4602, ['sadness'])],...]}

我的目标是将每个键中出现的每个元组的所有第一个数字输出到一个列表中。

到目前为止,我已经尝试过:

for key in sorted(my_emotions.keys()):
    auto_emotion_indices = [].append(my_emotions[key][0][0])

但它输出None

我尝试打印输出以查看我得到了什么,使用:

for key in sorted(my_emotions.keys()):
    auto_emotion_indices = [].append(my_emotions[key][0][0])

它输出我想要的字典的一部分(数字又名索引),但只有当一个键出现多次时才输出第一个。

例如钥匙detention:我只得到745,但没有34613779等等......

期望的输出是:

my_list = [2135, 7542, 4000, 4425, 777, 2634, 4442, 2948, 4263, 745, 3461, 3779, 4602...]

我应该添加什么以将其余这些数字包含在我的列表中?

提前致谢!

标签: pythonlistdictionarytuples

解决方案


将 my_emotions 定义为:

my_emotions = {'art': [(2135, ['anticipation', 'joy', 'sadness', 'surprise'])],
        'bad': [(7542, ['anger', 'disgust', 'fear', 'sadness'])],
        'beautiful': [(4000, ['joy']), (4425, ['joy'])],
        'boy': [(777, ['disgust']), (2634, ['disgust']), (4442, ['disgust'])],
        'ceremony': [(2948, ['joy', 'surprise'])],
        'child': [(4263, ['anticipation', 'joy'])],
        'detention': [(745, ['sadness']),
                      (3461, ['sadness']),
                      (3779, ['sadness']),
                      (4602, ['sadness'])]}

这条pythonic行可以解决问题:

my_list = [number for emotion in sorted(my_emotions.keys()) for number, _ in my_emotions[emotion]]

一种不那么Pythonic的方法是使用两个 for 循环来完成:

my_list = []
for emotion in sorted(my_emotions.keys()):
    for number, _ in my_emotions[emotion]:
        my_list.append(number)

如果要检查正在添加的内容,只需在内部循环中插入一条打印语句。在这两种情况下,输出都是:

[2135, 7542, 4000, 4425, 777, 2634, 4442, 2948, 4263, 745, 3461, 3779, 4602]

推荐阅读