循环求和find和multiple



我试图弄清楚如何做到这一点,但没有成功。希望你们能理解我为什么想弄明白。

我有这个数据

names = "name: almog quantity: 1 status: none name: avraham quantity: 6 status: none name: asaf quantity: 12 status: none name: yossi quantity: 2 status: none name: mishel quantity: 3 status: none"
values_li={'almog':'1.11','asaf':'2.33','yossi':'3.21','avraham':'4.16','mishel':'12.91'}
for k,v in values_li.items():
if k in names:
amount = float(v)

print(amount)

现在我有了每个字符串的总数。。。但是,我如何将每个字符串乘以下一个数量字符串?例如:almog是1.11,他的数量是1所以1.11*1。。。。。avraham是4.16,他的数量是6所以4.16*6。。。。。依此类推,并得到所有这些值的总和。

谢谢你,我希望你能理解。

*编辑---

谢谢你的帮助,但现在事情变得更复杂了。。。

一开始,我有这个代码

names = "name: almog grams: 9 id:141 quantity: 1 status: none name: avraham grams: 3 id:146 quantity: 6 status: none name: asaf grams: 1 id:1241 quantity: 12 status: none name: yossi grams: 2 id:2141 quantity: 2 status: none name: mishel grams: 6 id:1641 quantity: 3 status: none"
values_li={'bar':'47.2','loren':'11.12','yossi':'3.21','avraham':'4.16','mishel':'12.91'}
for k,v in values_li.items():
if k in names:
amounts = float(v)

因此,只有在名称字符串中找到values_li之一时,它才会对金额求和。不,我不知道如何使用你创建的新代码来找到每个代码的数量并将其相乘。

基本上,只有当它是values_li列表中的一个值时,我才想乘以数量上的值,然后将其总和为一个变量…

关于如何做到这一点,有什么想法吗?

您可以使用正则表达式从names字符串中提取名称和数量:

>>> re.findall(r"name: (w+) quantity: (d+)", names)
[('almog', '1'),
('avraham', '6'),
('asaf', '12'),
('yossi', '2'),
('mishel', '3')]

使用dict理解将名称映射到数量,然后使用另一个dict理解来将这些值与值相乘以获得结果:

>>> quantities = {name: float(quant) for name, quant in re.findall(r"name: (w+) quantity: (d+)", names)}
>>> {name: float(values_li[name]) * quantities[name] for name in values_li}
{'asaf': 27.96,
'almog': 1.11,
'yossi': 6.42,
'avraham': 24.96,
'mishel': 38.730000000000004}

这是假设names字符串总是以这种方式格式化,并且names字符串和values_lidict都包含相同的名称。(如果不是后者,则可以使用... for name in values_li if name in quantities}。(

对于更复杂的示例,请使用以下正则表达式:r"name: (w+).*? quantity: (d+)".*?将匹配两个字段之间的最小字符数。这将允许namequantity之间的其他属性,但它仍然假设name是第一个。

您可以使用re.findall解析names并将其转换为名称到数量的映射dict,然后使用dict理解生成您要查找的名称到数量映射:

import re
quantities = dict(re.findall(r'bname: (S+) quantity: (d+)', names))
amounts = {k: float(v) * int(quantities[k]) for k, v in values_li.items()}

amounts变为:

{'almog': 1.11, 'asaf': 27.96, 'yossi': 6.42, 'avraham': 24.96, 'mishel': 38.730000000000004}

最新更新