把清单分解成字典

2024-04-19 06:01:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表,s,这是查询水果数据库的结果,item[0]是水果的名称,item[1]是水果是否有种子,item[2]是它是否可以食用。你知道吗

s = [['Apple','Yes','Edible'], ['Watermellon','Yes','Yes']]

由于我的实际列表要大得多,我希望有一个非常简单的方法来引用/返回这些值。例如,print my_dict['Apple']['Seeds']将产生Yes

我认为我最好的选择是创建一个字典,但我正在寻找关于这是否是一个好方法以及如何做到这一点的建议。你知道吗

我开始编写一些代码,但不确定如何将第二组头放在适当的位置,因此我的示例使用了索引。你知道吗

my_dict =  {t[0]:t[1:] for t in s}

print my_dict['Apple'][0]

Tags: 方法名称数据库apple列表myitem种子
3条回答
import copy

def list_to_dict(lst):
    local = copy.copy(lst) # copied lst to local
    fruit = [i.pop(0) for i in local] # get fruit names

    result = {}
    for i in range(len(local)):
        result[fruit[i]] = local[i]
    return result

这将返回所需的词典。你知道吗

fruit_map = {
    fruit: {'Seeds': seeds, 'Edible': edible} for fruit, seeds, edible in s}

如果第二组键从未更改,那么最好使用字段定义一个适当的对象。这看起来有些过分或冗长,但总是有collections.namedtuple可以帮助你。你知道吗

namedtuple从字段名列表创建一个新类。该类还支持由列表初始化。举个例子:

import collections

Fruit = collections.namedtuple('Fruit', ['name', 'seeds', 'edible'])

这样,您就可以轻松地从列表中创建Fruit对象:

f = Fruit('Apple', True, False)
# Or, if you already have a list with the values
params = ['Apple', True, False]
f = Fruit(*params)

print f.seed

因此,您可以用一种非常简单的方法创建水果列表:

s = [['Apple','Yes','Edible'], ['Watermellon','Yes','Yes']]

fruits = [Fruit(*l) for l in s]

你真的需要有一个按某个字段编入索引的字典,它没有什么不同:

s = [['Apple','Yes','Edible'], ['Watermellon','Yes','Yes']]

fruit_dict = {l[0]: Fruit(*l) for l in s}    
print(fruit_dict['Apple'].seeds)

namedtuple在将值列表转换为更易于使用的对象时非常方便(例如在读取CSV文件时,这种情况与您要求的情况非常相似)。你知道吗

相关问题 更多 >