如何从列表列表创建字典键?

如何解决如何从列表列表创建字典键?

字符串列表:

['Georgie Porgie',87,'$$$',['Canadian','Pub Food'],'Queen St. Cafe',82,'$',['Malaysian','Thai'],'Dumplings R Us',71,'Chinese','Mexican Grill',85,'$$','Mexican','Deep Fried Everything',52,'Pub Food']

我正在尝试从上面的列表中创建一个cuine_to_names 字典。菜系在索引 3 处,有时是它们自己的迷你清单。餐厅名称在索引 0 处。它们每四个索引重复一次。美食 - 3::4,名称 - 0::4。

我遇到的问题是从索引 3::4 中提取元素并将它们设为键。我认为麻烦来了,因为有时它们是一个字符串的迷你列表,有时它们只是一个字符串。这使得使用 defaultdict 对我来说很困难,但我是学习该功能的新手。我看到其他一些答案包括 setdefault 之类的东西,但我不知道如何在这种特定情况下使用它。任何指导将不胜感激!

我想要这个输出

Cuisine to list of restaurant names:
# dict of {str,list of str}
{'Canadian': ['Georgie Porgie'],'Pub Food': ['Georgie Porgie','Deep Fried Everything'],'Malaysian': ['Queen St. Cafe'],'Thai': ['Queen St. Cafe'],'Chinese': ['Dumplings R Us'],'Mexican': ['Mexican Grill']}

我试过了,得到了 TypeError: unhashable type: 'list':

from collections import defaultdict

cuisine_to_name = defaultdict(list)
for cuisine,name in zip(contents_list_2[3::4],contents_list_2[::4]):
  cuisine_to_name[cuisine].append(name)

print(cuisine_to_name)

解决方法

问题在于变量 cuisine 是一个列表,而您正试图将其用作字典的键,请改为这样做:

import pprint
from collections import defaultdict

data = ['Georgie Porgie',87,'$$$',['Canadian','Pub Food'],'Queen St. Cafe',82,'$',['Malaysian','Thai'],'Dumplings R Us',71,'Chinese','Mexican Grill',85,'$$','Mexican','Deep Fried Everything',52,'Pub Food']

res = defaultdict(list)
for v,k in zip(data[::4],data[3::4]):
    ks = k if isinstance(k,list) else [k]
    for ki in ks:
        res[ki].append(v)

pprint.pprint(dict(res))

输出

{'Canadian': ['Georgie Porgie'],'Chinese': ['Dumplings R Us'],'Malaysian': ['Queen St. Cafe'],'Mexican': ['Mexican Grill'],'Pub Food': ['Georgie Porgie','Deep Fried Everything'],'Thai': ['Queen St. Cafe']}
,

如果 l 是您的列表,您可以执行以下操作:

l=['Georgie Porgie','Pub Food']

res={l[i]:l[i+3] if type(l[i+3])==list else [l[i+3]]  for i in range(0,len(l),4)}

>>>print(res)

{'Georgie Porgie': ['Canadian','Queen St. Cafe': ['Malaysian','Dumplings R Us': ['Chinese'],'Mexican Grill': ['Mexican'],'Deep Fried Everything': ['Pub Food']}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?