制作字典?来自2个列表/列

时间:2017-05-19 09:55:36

标签: python-2.7

我有一个包含多个列的大型数据库,我需要其中两个数据。

最终结果是有2个下拉菜单,其中第一个设置"名称"第二个是"数字"已合并到名称中的值。我只需要可用的数据,这样我就可以将它输入到另一个程序中。

所以包含"名称"的唯一值的列表或字典;列表,附加数字列表中的数字。

# Just a list of random names and numbers for testing
names = [
    "Cindi Brookins",
    "Cumberband Hamberdund",
    "Roger Ramsden",
    "Cumberband Hamberdund",
    "Lorean Dibble",
    "Lorean Dibble",
    "Coleen Snider",
    "Rey Bains",
    "Maxine Rader",
    "Cindi Brookins",
    "Catharine Vena",
    "Lanny Mckennon",
    "Berta Urban",
    "Rey Bains",
    "Roger Ramsden",
    "Lanny Mckennon",
    "Catharine Vena",
    "Berta Urban",
    "Maxine Rader",
    "Coleen Snider"
]

numbers = [
    6,
    5,
    7,
    10,
    3,
    9,
    1,
    1,
    2,
    7,
    4,
    2,
    8,
    3,
    8,
    10,
    4,
    9,
    6,
    5
]

所以在上面的例子中" Berta Urban"会出现一次,但仍然会分配数字8和9," Rey Bains"会有1和3。

我试过

mergedlist = dict(zip(names, numbers))

但是这只会将最后一个数字分配给名称。

我不确定我是否可以使用Unique" name"它包含多个"数字"。

2 个答案:

答案 0 :(得分:0)

dict中不能有多个同名的键,但是在保存匹配数字列表时,dict键可以是唯一的。类似的东西:

mergedlist = {}
for i, v in enumerate(names):
    mergedlist[v] = mergedlist.get(v, []) + [numbers[i]]

print(mergedlist["Berta Urban"])  # prints [8, 9]

效率不是很高,所以。根据您正在使用的数据库,数据库可能会以您喜欢的形式获得比您后处理和重建数据更快的结果。

答案 1 :(得分:0)

您只获得与每个名称相关联的最后一个数字,因为字典键是唯一的(否则它们不会有太大用处)。所以,如果你这样做

mergedlist["Berta Urban"] = 8 

之后

mergedlist["Berta Urban"] = 9

结果将是

{'Berta Urban': 9}

就像你做的那样:

berta_urban = 8
berta_urban = 9

在这种情况下,您希望berta_urban的值为9,而不是[8,9]

因此,正如您所看到的,您需要append而不是dict条目的作业。

from collections import defaultdict
mergedlist = defaultdict(list)
for (name,number) in zip(names, numbers): mergedlist[name].append(number)

这给出了:

 {'Coleen Snider': [1, 5], 
  'Cindi Brookins': [6, 7],
  'Cumberband Hamberdund': [5, 10],
  'Roger Ramsden': [7, 8],
  'Lorean Dibble': [3, 9],
  'Rey Bains': [1, 3],
  'Maxine Rader': [2, 6],
  'Catharine Vena': [4, 4],
  'Lanny Mckennon': [2, 10],
  'Berta Urban': [8, 9]
}

这就是我想你想要的。请注意,您将获得重复项,如'Catharine Vena': [4, 4]中所示,您还将获得每个名称的数字列表,即使列表中只有一个数字。