迭代存储在dict值

时间:2015-12-04 02:38:05

标签: python python-2.7 dictionary

我找不到能解决我问题的任何事情。

我有一个函数testdata(),它将数据切片作为字典返回。键被编号为文本(带前导零)以供参考。

该函数返回以下字典...

mydict = {}
some stuff here   
pprint(mydict)
{'01': [u'test1',
        u'test2',
        u'test3'],
 '02': [u'test4',
        u'test5',
        u'test6'],
 '03': [u'test7',
        u'test8',
        u'test9']
 }

我现在想要将切片的(01,02,03)键值一个接一个地发送到另一个函数作为逗号分隔的列表/字符串。

因此,第一次迭代将访问'01'并创建列表'test1,test2,test3',然后将其作为参数发送到我的其他函数分析(arg)。

这就是我所拥有的......

getdata = testdata() # 
for x in getdata:
    incr = 0
    analysis(x['01': incr])
    incr += 1

我收到以下错误:

ERROR:root:Unexpected error:(<type 'exceptions.TypeError'>, TypeError('slice indices must be integers or None or have an __index__ method',), <traceback object at 0x10351af80>)

4 个答案:

答案 0 :(得分:1)

    In [2]: dic
    Out[2]: 
    {'01': [u'test1', u'test2', u'test3'],
     '02': [u'test4', u'test5', u'test6'],
     '03': [u'test7', u'test8', u'test9']}

    In [6]: for k,v in dic.iteritems():
   ...:     print k,v
   ...:     
02 [u'test4', u'test5', u'test6']
03 [u'test7', u'test8', u'test9']
01 [u'test1', u'test2', u'test3']

所以我想你可以做一个..

analysis(k,v) 

答案 1 :(得分:0)

analysis(x['01': incr])执行['01': incr]时您使用了列表切片运算符:,并且应该与整数索引一起使用。 incrint,但'01'是字符串。

如果你只想迭代dict值(相应的列表),那就足够了:

for key, the_list in mydict.iteritems():
    analysis(the_list)

答案 2 :(得分:0)

keys = list(getdata) # Create a `list` containing the keys ('01', '02', ...)
sort(keys) # the order of elements from `list` is _unspecificed_, so we enforce an order here
for x in keys:
    css = ",".join(getdata[x]) # Now you have css = "test1,test2,test3"
    analysis(css) # dispatch and done

或者,更简洁(但内部步骤相同):

for x in sorted(getdata):
    analysis(",".join(getdata[x]))

至于你的错误,它告诉你不能在切片表示法中使用字符串。切片表示法保留给[lo:hi:step],并且无论如何都不能与dict一起使用。切片&#34;最简单的方法dict是通过词典理解。

答案 3 :(得分:0)

以下是一步一步说明如何做到这一点。

gendata = {
 '01': [u'test1',u'test2',u'test3'],
 '02': [u'test4',u'test5',u'test6'],
 '03': [u'test7',u'test8',u'test9']
 }

#iterate over the keys sorted alphabetically 
#   (e.g. key=='01', then key=='02', etc)

for key in sorted(gendata):  
    value_list = gendata[key]  # e.g. value_list=['test1', 'test2, 'test3']
    joined_string = ','.join(value_list) # joins the value_list's items with commas
    analysis(joined_string) #calls the function with 'test1,test2,test3'