0

该程序根据您希望列表中的两个索引号从列表中构建字典。这是输出

{'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 一起使用将返回一个包含三个条目的字典。键将是第一个输入。所以键是 ad 和 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, 'c': 7, 'b': 'h'} 时,我得到了 {'a': 2} 有什么问题?

4

3 回答 3

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'}
于 2012-06-15T00:20:48.180 回答
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'}

只是一个猜测。

于 2012-06-15T00:02:39.287 回答
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)

根据 Jakob 的建议更改为 pep8 缩进,以便您可以更清楚地看到缩进。您将退货声明置于错误的级别。

根据 astynax 的评论更正了可变默认值。

于 2012-06-15T00:06:14.797 回答