python语法特性

2024-04-24 03:06:31 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有可能这样做:

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]

我不会避免额外的线路和调用函数只有一次。你知道吗


Tags: returndef线路调用函数qwerty
3条回答

是的,只要使用方法dict.values()

x,y = f().values()[0:2]

不支持;字典索引不支持切片,因为它在字典键中通常没有任何意义。你知道吗

不过,你可以自己滚,用类似的东西

a, b = map(f().get, [1, 2])

或者(谢谢@DSM)

a, b = operator.itemgetter(1, 2)(f())

它们稍有不同,如果f()的结果缺少12作为键,则第一个将默认分配None,第二个将引发KeyErrormap(f().__getitem__, ...)应该相当于itemgetter,尽管可能稍微慢一点。你知道吗

我不清楚你到底想做什么。你在用整数给字典编索引。整数可以用作字典的键,但在您的情况下,列表似乎更有意义。字典和列表之间的一个重要区别是dicts没有排序。d[1]d[2]在您的示例中不一定排在第一和第二位。因此,如果您依赖于顺序,那么标准字典无论如何都不会工作(一个^{}会)。你知道吗

(您的数据结构是由函数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')]

但是如上所述,即使它们恰好在本例中的正确顺序,您也不能依赖字典的顺序,它会随着时间而改变。你知道吗

相关问题 更多 >