繁体   English   中英

如何在函数中使用* args返回字典列表?

[英]How to use *args in a function to return a list of dictionaries?

是否可以使用* args生成字典列表,其中每个字典具有完全相同的键,每个值是arg?

例如,我目前有这个功能:

def Func(word1,word2):
    return [{'This is a word':word1},{'This is a word':word2}]

我这样使用它:

print Func("Word1","Word2")

返回:

[{'This is a word': 'Word1'}, {'This is a word': 'Word2'}] 

问题是我想用1个字或5个字来使用这个函数。 我怎么能用* args呢? 是否可以启动这样的函数:

def Func(*args):

如果我能够产生以下内容并且“这是一个单词”的计数如此如此:

[{'This is a word1': 'Word1'}, {'This is a word2': 'Word2'}] 

您可以使用列表推导通过迭代*args来创建新的词典列表,就像这样

def Func(*args):
    return [{'This is a word': arg} for arg in args]

print Func("word1")
# [{'This is a word': 'word1'}]

print Func("word1", "word2")
# [{'This is a word': 'word1'}, {'This is a word': 'word2'}]

相当简单:

def Func(*args):
    return [{'This is a word': arg} for arg in args]


>>> Func('foo', 'bar', 'baz')
[{'This is a word': 'foo'}, {'This is a word': 'bar'}, {'This is a word': 'baz'}]

>>> Func('a', 'b', 'c', 'd', 'e')
[{'This is a word': 'a'}, {'This is a word': 'b'}, {'This is a word': 'c'}, {'This is a word': 'd'}, {'This is a word': 'e'}]

为满足您的额外要求:

def Func(*args):
    return [{'This is a word' + str(i+1): arg} for i, arg in enumerate(args)]


>>> Func('a', 'b', 'c', 'd', 'e')
[{'This is a word1': 'a'}, {'This is a word2': 'b'}, {'This is a word3': 'c'}, {'This is a word4': 'd'}, {'This is a word5': 'e'}]

看起来你可能会想要一个有序的字典?

import collections
def Func2(*args):
    return collections.OrderedDict(('This is a word' + str(i+1), arg) for i, arg in enumerate(args))

>>> Func2('a', 'b', 'c', 'd', 'e')
OrderedDict([('This is a word1', 'a'), ('This is a word2', 'b'), ('This is a word3', 'c'), ('This is a word4', 'd'), ('This is a word5', 'e')])

要不就:

import collections
def Func2(*args):
    return collections.OrderedDict((i+1, arg) for i, arg in enumerate(args))

>>> Func2('a', 'b', 'c', 'd', 'e')
OrderedDict([(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e')])

我想,这会使访问数据对象更容易一些。

>>> foo = Func2('a', 'b', 'c', 'd', 'e')
>>> foo[1]
'a'

通过这种方式,我们看到我们已经实现了一种可由可修改索引访问的列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM