如何用更简洁写法将特定格式列表转换为Python字典?
简洁实现列表转字典的方法
问题分析
你提供的推导式无法运行是因为语法错误:字典推导式的循环部分需遵循for 变量 in 可迭代对象的结构,你写的for x.split('=') in (x for x in game)不符合规则,x.split('=')是表达式,不能作为循环变量使用。
正确的单行简洁实现
针对你的列表格式,以下是两种简洁的单行推导式实现:
方法一(兼顾可读性与简洁)
game = ['RGT = (HDG, QJV)', 'QDM = (GPB, SXG)', 'DJN = (TQD, BQN)', 'QGG = (GGS, PTC)'] gamedict = { k.strip(): tuple(v.strip()[1:-1].split(', ')) for k, v in (item.split('=', 1) for item in game) }
方法二(更紧凑的单行写法)
gamedict = {k.strip(): tuple(v.strip().strip('()').split(', ')) for k, v in (s.split('=', 1) for s in game)}
代码细节解释
s.split('=', 1):将每个字符串按=分割为两部分,1限制分割次数,避免值中意外出现=时导致的错误k.strip():去除键名两侧的空格,得到干净的键(如'RGT')v.strip().strip('()'):先去除值字符串两侧的空格,再去掉首尾的括号(如把' (HDG, QJV)'转为'HDG, QJV')split(', '):将处理后的字符串按,分割为两个元素,用tuple()转为元组,保持原格式的结构
内容的提问来源于stack exchange,提问作者Shadoque
相关产品推荐
相关产品推荐

