def a(*x):
print x
a({'q':'qqq'})
a(*{'q':'qqq'})#why only print key.
回溯:
({'q': 'qqq'},)
('q',)
答案 0 :(得分:5)
这就是字典如何转换为序列。
tuple(dictionary)= tuple(dictionary.keys())
出于类似的原因
for x in dictionary:
将键,而不是对,分配给x
答案 1 :(得分:2)
当您调用某个函数时,在list
或dict
之前使用星号将其作为位置参数传递。
例如:
>>> 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'}
请注意,您现在基本上回到了开始的地方并且什么都没有。