可以做这样的事情:
def f():
d={}
d[1]='qwe'
d[2]='rty'
return d
a,b=f()[1:2]
不是a,b=f()[1],f()[2]
而不是
t=f()
a,b=t[1],t[2]
我不会避免额外的行和调用函数一次。
答案 0 :(得分:2)
我不清楚你想要做什么完全。您是按整数索引字典。整数可以很好地用作字典的键,但看起来列表在你的情况下更有意义。字典和列表之间的一个重要区别是dicts不是有序的。在您的示例中,d[1]
和d[2]
不一定位于第一和第二位。因此,如果您依赖订单,标准词典无论如何都不会起作用(OrderedDict
会)。
(您的数据结构由函数f()
返回的事实在这里没有任何区别,所以为了更好的可读性,我会忽略它)
如果你有
lst = ['qwe', 'rty']
你可以简单地做
a, b = lst
将lst[0]
分配给a
,将lst[1]
分配给b
。列表也可以切片:
long_lst = range(1000)
a, b = long_lst[500:502]
如果你实际上做想要使用字典,你可以像这样访问它的组件:
>>> d = {'a': 'AAA', 'b': 'BBB'}
>>> d.keys()
['a', 'b']
>>> d.values()
['AAA', 'BBB']
>>> d.items()
[('a', 'AAA'), ('b', 'BBB')]
但如上所述,即使它们恰好在此示例中的顺序正确,您也不能依赖字典的顺序,它会随着时间的推移而改变。
答案 1 :(得分:1)
没有;字典索引不支持切片,因为它通常在字典键中没有任何意义。
你可以自己滚动它,比如
a, b = map(f().get, [1, 2])
或(感谢@DSM)
a, b = operator.itemgetter(1, 2)(f())
这些略有不同,如果f()
的结果缺少1
或2
作为键,则第一个将默认为分配None
而第二个将提升KeyError
。 map(f().__getitem__, ...)
应该等同于itemgetter
,但可能稍慢一些。
答案 2 :(得分:1)
是的,只需使用方法dict.values()
:
x,y = f().values()[0:2]