将列表值转换为字典行

时间:2017-09-22 03:56:35

标签: python-2.7 dictionary

我是一位编码经验有限的Python新手,这是我在这个网站上的第一个问题。我真的希望有人可以帮助我。

我正在使用一些新的和一些以前存在的代码。在以前的现有代码中:

members is established as a list array of names
groupID is the ID number for the group

对于新代码,我需要跟踪行中的成员名称,并在新代码中添加其他信息。我试图用嵌套字典来做这件事。

为了说明这种情况:

groupID = 02
members = ['John', 'Paul', 'George', 'Ringo']
memberDetails = {'group': groupID,
                 'currentMembers': {'name': members, 'age': 30, 'sex': 'Male', 'hometown': 'City'}
                      }

print memberDetails

此时我并不关心年龄,性别和家乡的价值观,我稍后会更新这些数据,然后使用字典中的键进一步操作数据。

上面的代码返回:

{'group': 2, 'currentMembers': {'hometown': 'City', 'age': 30, 'name': ['John', 'Paul', 'George', 'Ringo'], 'sex': 'Male'}}

我需要它分成行,例如:

{'group': 2, 'currentMembers': {'hometown': 'City', 'age': 30, 'name': 'John', 'sex': 'Male'}}, {'group': 2, 'currentMembers': {'hometown': 'City', 'age': 30, 'name': 'Paul', 'sex': 'Male'}}, {'group': 2, 'currentMembers': {'hometown': 'City', 'age': 30, 'name': 'George', 'sex': 'Male'}}, {'group': 2, 'currentMembers': {'hometown': 'City', 'age': 30, 'name': 'Ringo', 'sex': 'Male'}}

这样我就可以根据会员的名字跟踪故乡和其他细节。如果它以与我在字典中输入的顺序相同的顺序返回,它看起来会更好看,但这并不重要,只要我可以使用'名称来存储和检索数据。键。

我在定义词典后尝试使用此行拆分列表:

memberDetails['currentMembers'].update({'name': members.split(", ")})

然而,我收到此错误:

AttributeError: 'list' object has no attribute 'split'

我觉得我已经接近了:

for i in members:
    memberDetails['currentMembers']['name'] = i

这让我得到一个名字,但只有一行:

{'group': 2, 'currentMembers': {'hometown': 'City', 'age': 30, 'name': 'Ringo', 'sex': 'Male'}}

有关如何修复此词典或使用其他解决方案完成目标的任何建议?

2 个答案:

答案 0 :(得分:0)

groupID = 02
members = ['John', 'Paul', 'George', 'Ringo']
memberDetails = [{
    'group': 2,
    'currentMembers':{
        'name': member,
        'age': 30,
        'sex': 'male',
        'hometown': 'City'
    }
}for member in members]

print memberDetails

答案 1 :(得分:0)

这里的代码

group = {'group': 2}
members = ['John', 'Paul', 'George', 'Ringo']
current_members = []
memberDetails = {
    'age': 30,
    'sex': 'male',
    'hometown': 'City'
}
for name in members:
    newMember = memberDetails.copy()
    newMember['name'] = name
    current_members.append(newMember)

group['current_members'] = current_members
print group

将在下面输出。它更小,更少冗余

{
    'current_members': [
        {'hometown': 'City', 'age': 30, 'name': 'John', 'sex': 'male'}, 
        {'hometown': 'City', 'age': 30, 'name': 'Paul', 'sex': 'male'}, 
        {'hometown': 'City', 'age': 30, 'name': 'George', 'sex': 'male'}, 
        {'hometown': 'City', 'age': 30, 'name': 'Ringo', 'sex': 'male'}
    ], 
    'group': 2
}

您获得1行的原因是因为循环使用新名称覆盖了以前的名称。通过将memberDetails复制到newMember字典,您可以添加新名称,然后将其附加到current_members列表。通过这种方式,您可以获得每个成员的详细信息