不使用循环遍历列表

3

我目前正在开发一个Zabbix脚本,用于添加用户和他们所属的组。一个用户可能会有多个组,Zabbix文档中相关部分如下:

"usrgrps": [
            { "usrgrpid": "7" },
            { "usrgrpid": "8" },
            { "usrgrpid": "9" }
           ]

我有一个群组id列表,我想将其替换为7,8,9的位置,并用list[0],list[1],list[2]进行替换。

我尝试使用.join方法:

mylist = ['12','13','14']
z =  '"usrgrpid":"'.join(mylist)
s = '"usrgrps": [{"%s"},]' % (z)

输出:

'"usrgrps": [{"12"usrgrpid":"13"usrgrpid":"14"},]'

你有一个列表还是一个字符串?我看不出为什么要在这里使用 str.join - Moses Koledoye
加入字符串中的列表。我可以使用字符串,因为在发送之前我将其封装在json.dumps中。 - VIshu Kamble
3个回答

8
你可以使用列表推导式。
mylist = ['12', '13', '14']
d = {"usrgrps": [{'usrgrpid': uid} for uid in mylist]}
>>> d
{'usrgrps': [{'usrgrpid': '12'}, {'usrgrpid': '13'}, {'usrgrpid': '14'}]}

1
只需按照以下方式构建数据:

s = '"usrgrps": [{}]'.format(",".join(map(lambda x: '{{"usrgrpid":"{}"}}'.format(x), mylist)))

>>> s
'"usrgrps": [{"usrgrpid":"12"},{"usrgrpid":"13"},{"usrgrpid":"14"}]'

让我们扩展一下我们在这里所做的事情: 我们构建了一个字符串列表,如{"usrgrpid":"12"}

map(lambda x: '"usrgrpid":{}"'.format(x), mylist)

然后,我们只需使用",".join通过,将它们分开,以获得类似于{"usrgrpid":"12"},{"usrgrpid":"13"},{"usrgrpid":"14"}的字符串。
最后,只需格式化"usrgrps": [{}]字符串,将前面的字符串注入到“list”中。
否则,您需要使用Python的json库进行操作。
import json
data = json.dumps({"usrgrps": [{'usrgrpid': uid} for uid in mylist]})
data
'{"usrgrps": [{"usrgrpid": "12"}, {"usrgrpid": "13"}, {"usrgrpid": "14"}]}'

@StefanPochmann,说了这么多,也许你应该说出真正的问题是什么 :) - Netwave
非常感谢 @StefanPochmann 的指点。记住,https://www.youtube.com/watch?v=wg4trPZFUwc。附注:我也曾经遇到过这个问题,哈哈。 - Netwave

1
ids=['12','13','14']    
{'usrgrps': list(map(lambda x: {'usrgrpid' : x}, ids))}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接