如何从列表列表(任何语言)中获取字典值?

时间:2016-08-01 00:27:29

标签: c# python list dictionary

我最感兴趣的是简单性,所以会喜欢任何语言的解决方案(也很有趣,使用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]}

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