我找不到能解决我问题的任何事情。
我有一个函数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>)
答案 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]
时您使用了列表切片运算符:
,并且应该与整数索引一起使用。 incr
是int
,但'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'