【问题标题】:How to create 2 dictionaries from a list that contains a list of strings in python [duplicate]如何从包含python中字符串列表的列表中创建2个字典[重复]
【发布时间】:2015-02-01 22:09:27
【问题描述】:

如果你有一个类似下面 mylist 的列表

mylist = [['start', 'a', 'next'],['next','b','end'],['previous','c','start']]

如何创建键等于 list[0][0] 且 value=list 的字典

例如字典是:

{'start': ('a', 'next'), 'next': ('b', 'end'), 'previous': ('c', 'start')}

我正在尝试创建一个转换函数来遍历包含转换的列表列表。

我现在正在尝试进行列表理解,但我不断收到“IndexError: string index out of range”这个代码

d = {x[0]: (x[1],x[2]) for x in self.epsilon}
print(d)

我的列表存储在 self.epsilon 中,它等于: self.epsilon = [['q1', '0', 'q1'],['q1','1', 'q2'], ['q2','0','q2'], ['q2 ', '1', 'q1']]

【问题讨论】:

  • 我已复制粘贴了您的 sn-p,但无法重现上述错误。您确定由于听写理解而收到错误吗?如果是,你确定self.epsilon的内容和你提到的一样吗?我怀疑self.epsilon 可能是字符串的平面列表而不是嵌套结构。

标签: python


【解决方案1】:

最简单的方法是进行字典理解:

{x[0]: tuple(x[1:]) for x in mylist}

这要求 mylist 中的每个元素都是一个数组,其中至少有一个索引为 0 的元素用作键,并从每个嵌套数组中的剩余元素创建一个元组,用作关联键的值.

【讨论】:

  • gr8!!!!不知道 dic 理解!!!!!!!
【解决方案2】:
mylist = [['start', 'a', 'next'],['next','b','end'],['previous','c','start']]
dic={}
for i in mylist:
    dic[i[0]]=i[1:]
print dic

如果您不希望 listtuple 作为 dict 的值,请使用

mylist = [['start', 'a', 'next'],['next','b','end'],['previous','c','start']]
dic={}
for i in mylist:
    dic[i[0]]=tuple(i[1:])
print dic

【讨论】:

  • 字典推导以更清晰的方式解决了这个问题。至少,dict((key, value) for …) 对于旧版本的 Python 也是如此。
【解决方案3】:

在 python 3 和 2.7 中:

a_list = [['start', 'a', 'next'],['next','b','end'],['previous','c','start']]


a_dict = {l[0]: (l[1], l[2]) for l in a_list}

print(a_dict)
# {'start': ('a', 'next'), 'previous': ('c', 'start'), 'next': ('b', 'end')}

另一种方式:

a_dict = dict([[lst[0], (l[1], l[2])] for l in a_list]) 
# {'start': ('a', 'next'), 'previous': ('c', 'start'), 'next': ('b', 'end')}

【讨论】:

  • 字典推导在 Python 2,7 中也能正常工作。
  • @AshwiniChaudhary 哦。所以我把它改成了另一种方式。谢谢
【解决方案4】:

mylist = [['start', 'a', 'next'],['next','b','end'],['previous','c','start']]

最简单的方法是字典理解

d = {i[0]: (i[1], i[2])for i in mylist}

你得到 d 作为所需的输出

{'start': ('a', 'next'), 'next': ('b', 'end'), 'previous': ('c', 'start')}

时间复杂度最小的时间:6 µs

【讨论】:

  • 给出一个时间并没有给出太多信息,这里(这取决于你使用的 Python 解释器,哪台机器等)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-18
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
相关资源
最近更新 更多