是否可以做这样的事情:
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]
我不会避免额外的行并且只调用一次函数。
是否可以做这样的事情:
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]
我不会避免额外的行并且只调用一次函数。
我不清楚你到底想做什么。您正在按整数索引字典。整数可以用作字典的键就好了,但看起来列表在你的情况下更有意义。字典和列表之间的一个重要区别是字典没有排序。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')]
但是如上所述,即使在这个例子中它们的顺序是正确的,你也不能依赖字典的顺序,它会随着时间的推移而改变。
不; 字典索引不支持切片,因为它通常在字典键中没有任何意义。
不过,您可以自己滚动它,例如
a, b = map(f().get, [1, 2])
或(感谢@DSM)
a, b = operator.itemgetter(1, 2)(f())
这些略有不同,如果结果f()
是缺失1
或2
作为键,第一个将默认为 assigning None
,第二个将 raise KeyError
。map(f().__getitem__, ...)
应该等价于itemgetter
,但可能会稍微慢一些。
是的,只需使用方法dict.values()
:
x,y = f().values()[0:2]