【问题标题】:How to put values of a given List into a existing dictionary?如何将给定列表的值放入现有字典中?
【发布时间】:2020-02-29 06:06:29
【问题描述】:

我有一个包含他们元素的列表

my_list = ['a', 'b', 'c']

以及一个以键和空白字符串为值的字典

my_dictionary = {
    'key_a' : '',
    'key_b' : '',
    'key_c' : '',
}

问题是:将这个列表的每一个元素(按照这个特别的顺序)作为这些字典值中的每一个,用 Python 的方式是什么?

结果应该是这样的:

my_dictionary = {
    'key_a' : 'a',
    'key_b' : 'b',
    'key_c' : 'c',
}

Ps:请注意,我不需要字典值在该副本之后按顺序排列。正如 cmets 中所指出的,在 Python 3.7 之后,不再保证字典的顺序

【问题讨论】:

  • 列表元素和字典键有什么关系?相同的顺序,或相同的key_* 后缀,或……?
  • 仅用于您的示例,my_dictionary.update({f"key_{k}": k for k in my_list}) 有效。
  • 我给出的代码可能很容易理解。如果有帮助,请不要忘记标记为已接受。
  • @Jens 我正在报废一家餐馆的菜单,报废的菜单结果是一个列表。但是我需要将菜单的每个元素都编入目录并分类到我首先创建的字典中
  • 您使用的是哪个 Python 版本?在 Python 3.7 之前,不保证字典顺序。

标签: python python-3.x list dictionary data-structures


【解决方案1】:

你可以试试这个。

dict(zip(my_dictionary,my_list))

使用.update 方法更新您的my_dictionary


输出

{'key_a': 'a', 'key_b': 'b', 'key_c': 'c'}

注意:这适用于python3.7或更高版本。

原因在@MisterMiyagi的cmets中说明。

【讨论】:

  • 这仅保证提供自 Python 3.7 以来的预期结果。在此之前,不保证字典键顺序(尽管它在 CPython3.6 和 PyPy3 上实际上是有序的)。
  • @MisterMiyagi 同意,我应该在我的答案中添加这个细节。立即添加。
  • 请注意,zip 会迭代其最短的可迭代对象。
  • 为什么投反对票的你也发布了相同的答案?我很想知道对@BoseongChoi 投反对票的原因
  • 不一样。您的答案是覆盖而不是更新。我认为您可以将dict 更改为my_dictionary.update
【解决方案2】:

我假设您的字典顺序是有保证的,或者您不在乎顺序。
您可以使用内置函数zip
迭代两个不同的iterables是非常有用的功能。
文档:https://docs.python.org/3/library/functions.html#zip

my_dictionary = {
    'key_a': '',
    'key_b': '',
    'key_c': '',
}

my_list = ['a', 'b', 'c']

for key, item in zip(my_dictionary, my_list):
    my_dictionary[key] = item

print(my_dictionary)

输出: {'key_a': 'a', 'key_b': 'b', 'key_c': 'c'}

【讨论】:

  • ps。请注意内置dict 的命令。见stackoverflow.com/questions/39980323/…
  • 这正是我想要找到的!非常感谢 :) 关于字典顺序:最近我发现了这一点,但在这种情况下,顺序对我很重要,只是因为我需要将每个列表元素放在一个特定的 dict 键中——在那之后,字典的顺序就可以了不再关心
  • @Ch3steR 这在我的回答中没有问题。
  • 如果my_dictionarymy_list 长,如果重新分配字典,它会破坏原始键。正如我所评论的,使用my_dictionary.update 可以解决这个问题。
【解决方案3】:

试试这个:

i = 0
for key in my_dict:
      my_dict[key] = my_list[i]
      i+=1

输出:{'key_a': 'a', 'key_b': 'b', 'key_c': 'c'}

【讨论】:

  • 根据 PEP 234,使用 my_dict 而不是 my_dict.keys()
  • 虽然输出没有改变。我根据您的建议进行了编辑。
  • 其实这是我做的第一件事!但我认为“i = 0 ... i += 1”闻起来不像 Python。我来的最后一个想法是使用“reverse()”函数来反转列表并使用“pop()”函数来弹出字典中的每个列表元素。但我认为这闻起来不好或可读性不好
  • 什么意思:'闻起来不像蟒蛇'。 :D 如果您想要 1 行解决方案,请尝试字典理解。
  • @NishantAgarwal 对不起,如果我看起来很粗鲁或类似的坏事。我只是想说我认为这是一个内置解决方案或更复杂的东西,我不知道(因为我是 Python 初学者)
【解决方案4】:

你可以试试这个:

my_list = ['a', 'b', 'c']

my_dict = {
    'key_a' : '',
    'key_b' : '',
    'key_c' : '',
}

for index, key in enumerate(my_dict):
    my_dict[key] = my_list[index]

print(my_dict)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多