简体   繁体   English

来自二维数组的多键字典

[英]Multikey dictionary from 2d array

Trying to create multikey dictionary with values from the list, where keys of the dictionary are first column and first row values, except the empty cells.尝试使用列表中的值创建多键字典,其中字典的键是第一列和第一行值,空单元格除外。

The code below doesn't return the expected result.下面的代码不会返回预期的结果。 I also tried with map function and list comprehension.我还尝试了地图功能和列表理解。

# list data
list_data = [['', '', 'VARIANT1', 'VARIANT2'],
         ['power', 'kW', '12', '20'],
         ['range', 'm', '200', '400'],
         ['colour', '', 'blue', 'yellow']]

# my code
import collections
dict_data = collections.defaultdict()
for row in range(1: len(list_data)):
    for column in range(2: len(list_data[0])):
        dict_data[(list_data[row][0], list_data[0][column])
              ] = list_data[row][column]

# desired output
dict_data = {('power', 'VARIANT1'): '12',
         ('range', 'VARIANT1'): '200',
         ('colour', 'VARIANT1'): 'blue',
         ('power', 'VARIANT2'): '20',
         ('range', 'VARIANT2'): '400',
         ('colour', 'VARIANT2'): 'yellow', }

You can do this with a dictionary comprehension:你可以用字典理解来做到这一点:

list_data = [['', '', 'VARIANT1', 'VARIANT2'],
         ['power', 'kW', '12', '20'],
         ['range', 'm', '200', '400'],
         ['colour','' , 'blue', 'yellow']]


keys = {(x[0], y): x[i]  for x in list_data[1:] for i, y in enumerate(list_data[0]) if i >= 2}

keys_sorted = {k: v for k, v in sorted(keys.items(), key=lambda x: x[0][1])}

Output:输出:

>>> keys
{('power', 'VARIANT1'): '12',
 ('power', 'VARIANT2'): '20',
 ('range', 'VARIANT1'): '200',
 ('range', 'VARIANT2'): '400',
 ('colour', 'VARIANT1'): 'blue',
 ('colour', 'VARIANT2'): 'yellow'}

Or sorted as your example output:或排序为您的示例输出:

>>> keys_sorted
{('power', 'VARIANT1'): '12',
 ('range', 'VARIANT1'): '200',
 ('colour', 'VARIANT1'): 'blue',
 ('power', 'VARIANT2'): '20',
 ('range', 'VARIANT2'): '400',
 ('colour', 'VARIANT2'): 'yellow'}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM