我最感兴趣的是简单性,所以会喜欢任何语言的解决方案(也很有趣,使用LINQ看起来如何)。我尝试用Python做,但失败了。
从这两个清单中:
init_li1 = [[234,45,1,86,2,0],[324,6,1],[123,1111,3]]
init_li2 = ["Alpha", "Beta", "Gamma"]
我想得到这本词典:
{"Alpha":[234,45,1,86,2,0], "Beta":[324,6,1], "Gamma":[123,1111,3]}
答案 0 :(得分:1)
实际上,在Python中它很容易:
dictionary = dict(zip(init_li2, init_li1))
你知道,dict
构造函数可以像这样使用:
dict(('key1', 'value1'), ('key2', 'value2'))
好吧,zip()
将通过从其参数中获取相应的元素来生成元组。那就是:
zip([4, 5, 6], [2, 3, 4])
#-> (4, 2), (5, 3), (6, 4)
因此,我们从init_li2
获取密钥,从init_li1
获取值。
请注意zip()
在Python 2中返回一个列表。如果您正在处理大型列表,那么这不是内存有效的。要改善内存使用情况,请改用itertools.izip
。
答案 1 :(得分:0)
既然你提到过LINQ,你可以在C#中设置这样的东西:
var list_1 = new List<List<int>>
{
new List<int> { 234, 45, 1, 86, 2, 0 },
new List<int> { 324, 6, 1 },
new List<int> { 123, 1111, 3 }
};
var list_2 = new List<string>
{
"Alpha",
"Beta",
"Gamma"
};
然后你可以把它们拉成一个字典,如:
var dictionary = new Dictionary<string, List<int>>();
list_2.ForEach(x =>
{
int index = list_2.IndexOf(x);
dictionary.Add(list_2[index], list_1[index]);
});
或者,在'查询样式'中,可能是这样的:
var results = from key in list_2
let index = list_2.IndexOf(key)
let values = string.Join(" ", list_1[index])
select new { Key = key, Values = values };
使用以下内容打印出这些结果应该可以为您提供所需的信息:
foreach (var item in results)
{
Console.WriteLine($"{item.Key} : {item.Values}");
}
答案 2 :(得分:0)
init_li1 = [[234,45,1,86,2,0],[324,6,1],[123,1111,3]]
init_li2 = ["Alpha", "Beta", "Gamma"]
new_dict = {}
for i in range(0, len(init_li1)):
new_dict[init_li2[i]] = init_li1[i]
print new_dict