Python 如何逐字使用括号中的变量

Python 如何逐字使用括号中的变量,python,substitution,prometheus,Python,Substitution,Prometheus,我有一个奇怪的问题,希望能在这里找到解决办法。我正在使用push_to_网关模块来允许普罗米修斯浏览一些数据。该过程分为两个步骤: 1) 声明一个变量,如下所示: g = Gauge(ctr, '', ['host', 'ip'], registry=registry) 主机和ip是普罗米修斯数据库中使用的标签。注册表与我的问题无关 2) 填充数据: g.labels(hostname, ipaddr).set(val) hostname和ipaddr是包含值的变量 当您查看普罗米修斯中的数

我有一个奇怪的问题,希望能在这里找到解决办法。我正在使用push_to_网关模块来允许普罗米修斯浏览一些数据。该过程分为两个步骤:

1) 声明一个变量,如下所示:

g = Gauge(ctr, '', ['host', 'ip'], registry=registry)
主机和ip是普罗米修斯数据库中使用的标签。注册表与我的问题无关

2) 填充数据:

g.labels(hostname, ipaddr).set(val)
hostname和ipaddr是包含值的变量

当您查看普罗米修斯中的数据时,您将看到如下内容:

ctr{hostname="node1",ip="1.1.1.1"} -1 
由于我有数千个计数器要导入到Prometheus中,并且所有计数器都有不同的标签集,因此我希望创建一个OrderedICT,其中包含标签及其值,同时解析数据并使用该数据生成1)和2)。填充第1部分)很容易。我只是键入:

g = Gauge(ctr, '', list(labels.keys()), registry=registry)
该行需要一个列表,它得到一个列表

但是我如何填写第2部分)因为g.labels希望主机名和ipaddr用“,”分隔(即不是列表)。如果我使用了list(labels.values()),那么它会在括号内显示为一个列表,这是行不通的。我需要将列表(labels.values())扩展到括号内的“node1”和“1.1.1.1”,这样才能工作,但我不知道如何操作(如果可能的话),因此2)看起来像:

g.labels('node1', '1.1.1.1').set(val)

Thx

这正是
*
派上用场的地方。它解压缩列表中的值

尝试:

下面是一个示例,说明了
*
如何在python中工作

def f(a, b):
    print a, b

tup = ("Hello", "there")

f(*tup)
# prints "Hello there"

另一个解决方案是在飞行中打开包装:

hostname, ipaddr = labels.values()
g.labels(hostname, ipaddr).set(val)

我试过了,但没用。你是在说C还是C++?我创建了一个简单的列表(['a'、'b'、'c']),当我尝试打印*列表时,它返回的语法无效。自从我找到了另一个解决方案后,我已经没有热水了,但如果知道如何做以供将来参考,我还是很高兴的。不,这是python!
*
运算符解压列表或元组,但仅当作为函数参数传递时才起作用。请参阅此处了解更多详细信息:我还用一个小示例更新了我的答案。这不起作用,因为标签列表的大小可能不同。有时可能是两个参数,有时更多。这就是为什么我在寻找一种更灵活的方法。
hostname, ipaddr = labels.values()
g.labels(hostname, ipaddr).set(val)