此程序根据列表中您想要的两个索引号从列表中构建字典。 这是输出
{'a':2,'c':7,'b':'h'}
def buildDict2(theList,inputOne,inputTwo) :
newdict={}
for a in theList:
if inputTwo >= len(a):
print "error"
return "error"
if inputOne >= len(a):
print "error"
return "error"
for oneValue in a:
print len(a)
varkey=a[inputOne]
varvalue=a[inputTwo]
newdict[varkey]=varvalue
return newdict
print buildDict2([["a", "s","d", 2,0,1],["b", "f",3,"h",0,2],["c", "g",5,7]],0,3)
如何将其转换为单循环? +1所有答案 谢谢你的帮助,非常感谢。
基本上我只需要使用一个循环而不是两个
编辑:重要概念:它需要一本字典和两个数字。这两个数字告诉程序要使用的列表索引。 list = [[a,b,c],[d,e,f],[h,g,i]]与数字0和2一起使用将返回带有三个条目的字典。键将是第一个输入。所以键是d和h,值将是第二个输入的列表索引,所以c,e i。得到它?
代码
def buildDict2(theList, range1, range2, newdict = {}):
for a in theList:
if range2 >= len(a) or range1 >= len(a):
return "error"
newdict[a[range1]] = a[range2]
return newdict
print buildDict2([["a", "s","d", 2,0,1],["b", "f",3,"h",0,2],["c", "g",5,7]],0,3)
我得到{'a':2} 当我想要的时候 {'a':2,'c':7,'b':'h'} 这个问题是什么?
答案 0 :(得分:4)
这是另一种方法,使用map()
而不是显式循环:
>>> from operator import itemgetter
>>> def build_dict(lists, key_idx, value_idx):
... return dict(map(itemgetter(key_idx, value_idx), lists))
...
>>> build_dict([["a", "s","d", 2,0,1],["b", "f",3,"h",0,2],["c", "g",5,7]],0,3)
{'a': 2, 'c': 7, 'b': 'h'}
答案 1 :(得分:2)
def buildDict2(theList, pos1, pos2):
di = {}
for element in theList:
try:
di[element[pos1]] = element[pos2]
except IndexError:
return "Error" # <- Idk?
return di
assert buildDict2([["a", "s","d", 2,0,1],["b", "f",3,"h",0,2],["c", "g",5,7]],0,3) == {'a': 2, 'c': 7, 'b': 'h'}
只是一个猜测。
答案 2 :(得分:2)
def buildDict2(theList, range1, range2):
newdict = {}
for a in theList:
if range2 >= len(a) or range1 >= len(a):
return "error"
newdict[a[range1]] = a[range2]
return newdict
if __name__ == '__main__':
print buildDict2([["a", "s","d", 2,0,1],["b", "f",3,"h",0,2],["c", "g",5,7]],0,3)
根据雅各布的建议更改为pep8缩进,以便您可以更清楚地看到缩进。你把你的退货声明放错了。
根据astynax的评论纠正了可变违约。