【问题标题】:Using a loop, to create a dictionary from a list使用循环,从列表中创建字典
【发布时间】:2018-12-24 20:58:03
【问题描述】:

我正在尝试创建一个函数来创建一个字典,给定一个将被输入的列表。 我想通过使用 for 循环,我可以获取列表,创建键,然后使用循环输入列表中每个项目的值。

将此列表用作输入:

simpsons = 'Homer', 'Bart', 'Marge', 'Lisa'

def create_dict_from_list(names):
    name_dict = {}
    for name in names:
        name_dict['name']= name
    return name_dict

这只是返回一个键值对。 看起来字典不会创建多个值,这就是为什么它只返回一个而不遍历列表的其余部分。

当我更改name_dict[name] = name 时,它会创建所有的键、值,但键和值都是名称。

当我更改 name_dict[name] = 'name' 时,我得到了反转的键值,但它返回了列表中的所有 4 个项目。

【问题讨论】:

  • 你真正想要的价值观是什么?
  • 在这里阅读:stackoverflow.com/a/53907980/7505395(我的回答)- 类似的问题。在这里:docs.python.org/3/tutorial/datastructures.html#dictionaries。一个键只能保存一个值 - 该值可以是一个包含多个值的列表。如果您多次使用d["name"]= ...,您会一遍又一遍地覆盖相同的键值......
  • 您描述的行为正是每种情况下的预期行为。目前还不清楚你真正想要什么。
  • 呀;你是对的。问题是您的最后一次迭代最后将列表的最后一个值分配给字典的“名称”键;并且因为你一直只有那个你正在迭代的密钥;因此这是唯一剩下的键值对。
  • 您能明确说明您的预期输出吗?应该是这样的:map = {'name': ['Homer', 'Bart', 'Marge', 'Lisa']} 还是别的什么?

标签: python python-3.x loops dictionary for-loop


【解决方案1】:

对于您想要的答案(基于我对您问题的理解),我不确定您为什么使用 for 循环。你的函数中不需要循环。只需一个简单的任务就可以完成这项工作。你不必要地把它复杂化了。

simpsons = ['Homer', 'Bart', 'Marge', 'Lisa']

def create_dict_from_list(names):
    name_dict = {}
    name_dict['name'] = names # <--- No need of for loop
    return name_dict
create_dict_from_list(simpsons)
# {'name': ['Homer', 'Bart', 'Marge', 'Lisa']}

【讨论】:

  • 哈哈我现在在笑我的回答
【解决方案2】:

您可以将默认值设置为一个空列表 [] 用于键 'name' 对于给定的示例,如果要将所有名称分配给键 'name',则可以不使用 for 循环(由 @Bazingaa 回答)。另一方面,如果您想有选择地分配名称,请使用for 循环。

simpsons = 'Homer', 'Bart', 'Marge', 'Lisa'

def create_dict_from_list(names):
    name_dict = {}
    name_dict.setdefault('name',[])
    for name in names:
        name_dict['name'].append(name)
    return name_dict
create_dict_from_list(simpsons)

输出

{'name': ['Homer', 'Bart', 'Marge', 'Lisa']}

【讨论】:

  • 变量simpsons 列出不带方括号的名称的方式将创建一个元组(因此是字典中的一个元组),而不是一个列表。不仅列表是可变的,而元组是不可变的,而且函数需要一个列表。
  • 我认为这无关紧要。两者都是可迭代的,我正在使用默认列表初始化 dict 键。将呈现的输入不必要地转换为列表将是矫枉过正的。我们不会更改列表的元素,因此数据结构是元组还是列表都没有关系。我们只需要一个可迭代的。在这种情况下,也可以使用定义明确的字符串。谢谢
猜你喜欢
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 2019-04-23
  • 2019-07-28
相关资源
最近更新 更多