Python:从列表列表中创建字典

时间:2017-03-02 20:16:45

标签: python list dictionary tuples ipython

我的列表列表如下所示:

[[4,'apples'],[3,'oranges'],[4,'bananas'],[2,'apples'],[2,'pineapple'],[3,'apples']]

我想从中创建一个字典,其中列出了每个项目的值: 例如,我想要以下输出:

{4:'apples','bananas', 3:'oranges','apples', 2:'apples', 'pineapple'}

4 个答案:

答案 0 :(得分:2)

如果您不想使用dict.setdefault

collections.defaultdict可以提供帮助:

lst = [[4,'apples'],[3,'oranges'],[4,'bananas'],[2,'apples'],[2,'pineapple'],[3,'apples']]

dct = {}

for num, name in lst:
    dct.setdefault(num, []).append(name)

print(dct)
#{2: ['apples', 'pineapple'],
# 3: ['oranges', 'apples'],
# 4: ['apples', 'bananas']}

然而,defaultdict通常是更好,更通用的解决方案。

答案 1 :(得分:1)

代理机构为您服务:

lst = [['4','apples'],['3','oranges'],['4','bananas'],['2','apples'],['2','pineapple'],['3','apples']]

result = {}
for item in lst:
    key = item[0]
    try:
        result[key].append(item[1])
    except:
        result[key] = [item[1]]

print(result)
# {'3': ['oranges', 'apples'], '2': ['apples', 'pineapple'], '4': ['apples', 'bananas']}

正如@ Jean-Francois Fabre所述,这个解决方案相当缓慢:对于100000次迭代,3,5秒为5.7秒,3,5为defaultdict的解决方案。

答案 2 :(得分:0)

使用collections.defaultdict

result = defaultdict(list)
for key, value in [[4,apples],[3,oranges],[4,bananas],[2,apples],[2,pineapple],[3,apples]]:
    result[key].append(value)

答案 3 :(得分:0)

defaultdict可能对您有用。

Configuration conf = HBaseConfiguration.create();
conf.addResource(new Path("/etc/hbase/conf/core-site.xml"));
conf.addResource(new Path("/etc/hbase/conf/hbase-site.xml"));
JavaHBaseContext hbaseContext = new JavaHBaseContext(jsc, conf);
hbaseContext.bulkPut(rdd, TableName.valueOf("gfttsdgn:FRESHHBaseRushi"), new PutFunction(), true);

public static class PutFunction implements Function<String, Put> { public Put call(String v) throws Exception { Put put = new Put(Bytes.toBytes(v)); put.add(Bytes.toBytes("c1"), Bytes.toBytes("output"), Bytes.toBytes("rohan")); return put; } } 的官方文档示例对您有所帮助。

https://docs.python.org/3/library/collections.html#defaultdict-examples