a(* {'q':'qqq'}),为什么只打印键

时间:2010-01-07 01:11:00

标签: python

def a(*x):
    print x

a({'q':'qqq'})
a(*{'q':'qqq'})#why only print key.

回溯:

({'q': 'qqq'},)
('q',)

7 个答案:

答案 0 :(得分:5)

这就是字典如何转换为序列。

tuple(dictionary)= tuple(dictionary.keys())

出于类似的原因

for x in dictionary:

将键,而不是对,分配给x

答案 1 :(得分:2)

当您调用某个函数时,在listdict之前使用星号将其作为位置参数传递。

例如:

>>> a(*('test', 'testing'))
('test', 'testing')

>>> a(*{'a': 'b', 'c': 'd'})
('a', 'c')

答案 2 :(得分:2)

在函数调用中的表达式前面使用*迭代表达式的值(在这种情况下是你的dict),并使迭代中的每个项成为函数调用的另一个参数。迭代Python中的dict会产生关键(无论好坏)。

答案 3 :(得分:1)

a(*{'q' : 'qqq'})

将尝试将您的dict{'q':'qqq'})扩展为该函数的逐项列表。

请注意:

tuple({'q' : 'qqq'})

返回('q',),这正是您所看到的。当您将字典强制转换为列表/元组时,您只能获得密钥列表。

答案 4 :(得分:1)

迭代字典会产生密钥。

d = {'a': 1, 'b': 2, 'c': 3 }

for x in d:
    print x  # prints a, b, c but not necessarily in that order

sorted(d): # Gives a, b, c in that order. No 1/2/3.

如果要从字典中获取键和值,可以使用.items()或.iteritems()

sorted(d.items()) # [('a,' 1), ('b', 2), ('c', 3)]

答案 5 :(得分:1)

你要求一个参数列表,然后告诉python发送一个dict作为参数序列。当dict转换为序列时,它使用键。

我猜你真的正在寻找**,而不是*

答案 6 :(得分:0)

可能是因为当你对它进行标准迭代时,这是字典返回的内容。它被转换为包含它的键的序列。此示例表现出相同的行为:

>>> for i in {"a": "1", "b": "2"}:
...     print i
...
a
b

为了获得我所期望的,你会将它作为变量关键字参数传递,如下所示:

>>> def a(**kwargs):
...     print kwargs
...
>>> a(**{"a": "1", "b": "2"})
{'a': '1', 'b': '2'}

请注意,您现在基本上回到了开始的地方并且什么都没有。