【问题标题】:Concatenate values of dictionary of list with nested dictionaries将列表字典的值与嵌套字典连接起来
【发布时间】:2021-10-20 07:21:28
【问题描述】:

我想从以下字典中提取值 A、C、D 和 E(我不需要 value_B,它是一个数字):

{'key1': [{'key_A': 'value_A', 'key_B': value_B}, 
         {'key_A': 'value_C'},
         {'key_A': 'value_D'},
         {'key_A': 'value_E'}],
'key2': True}

然后我想将这些值连接成一个字符串,每个值之间有一个新行。 像这样:

string = ''
for value in values:
    string += value + '\n' 

或者这样:

string = ''
string = '\n'.join(values)

我想要的是这个:

string = 'value_A' + '\n' + 'value_C' + '\n' + 'value_D' + '\n' + 'value_E'

最好的方法是什么?我该怎么做呢? 我什至不知道从哪里开始。

【问题讨论】:

  • 为什么你有多个key_A而不是{'key1': [{'key_A': ['value_A', 'value_C', 'value_D', 'value_E'], 'key_B': 'value_B'}], 'key2': True}
  • {'key_A': 'value_C'} 是列表中的一个字典,它是另一个字典的值。 {'key_A': 'value_D'} 是另一个字典,它是该列表的另一个元素。这不可能吗?
  • 根据我们帖子上的讨论,我建议您 edit 这样做,这样很明显您在运行前不知道内部 dicts 的实际键。

标签: python string list dictionary concatenation


【解决方案1】:

虽然您可以一次性完成此操作,但我建议您将问题分解为更小的子问题。

my_string = '\n'.join(e['key_A'] for e in my_dict['key1'])

你有一个字典,其中一个键包含一个字典列表。您希望得到一个字符串,其中包含由 '\n' 分隔的 dicts 列表中的每个 dict 中的 'key_A' 的值。

对我来说,显而易见的步骤是:

  1. 从父字典的“key1”中选择字典列表。
  2. 从字典列表中收集“key_A”的值
  3. 将这些值连接到一个由“\n”分隔的字符串中
# Select the list of dicts from the parent dict
my_list_of_dicts = my_dict['key1']

# Select the 'key_A' value from each dict in the list
my_values = [e['key_A'] for e in my_list_of_dicts]

# Join the values together into a string separated by the '\n'
my_string = '\n'.join(my_values)

如果您直到运行时才知道要使用什么密钥,并且您确信第一个密钥将是所需的密钥。您可以提前派生密钥并存储它,也可以为每个单独的字典派生它。

# Derive the key in advance
# Get the first key of the first dict stored in my_dict['key1']
my_key = list(my_dict['key1'][0].keys())[0]
my_string = '\n'.join(e[my_key] for e in my_dict['key1'])

# Derive the first key for every dict
my_string = '\n'.join(e[list(e.keys()[0])] for e in my_dict['key1'])

【讨论】:

  • 您不需要join 的列表。 join(e['key_A'] for e in my_dict['key1'])
  • @Sujay 谢谢!我总是忘记这种语言的怪癖。
  • 我正在尝试这样做:my_list_of_dicts = my_dict[list(my_dict.keys())[0]] 因为我想要 dict 的第一个值,无论键是什么,结果字符串只是 value_A 连接了很多次。 value_C、D 和 E 不出现。我究竟做错了什么?我应该编辑问题并显示更新后的代码吗?
  • 不要使用一段代码来描述你正在尝试做的事情,(因为如果它有效,你就不需要寻求帮助),你能试着描述你想要做什么吗? '正在尝试用英语做?
  • 我想要一个'value_A' + '\n' + 'value_C' + '\n' + 'value_D' + '\n' + 'value_E' 的字符串。但我试图实现上面的代码,现在我只得到一个字符串'value_A' + '\n' + 'value_A' + '\n' + 'value_A' + '\n' + 'value_A。我是更清楚还是应该尝试详细说明?真正的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 2022-11-22
  • 2022-12-05
相关资源
最近更新 更多