Mai*_*jas 1 python dictionary list
我必须将字典的键与列表进行比较。
l = {"Carlos": 1131577, "Rodrigo": 3250239, "Marisol": 1174787}
Run Code Online (Sandbox Code Playgroud)
里面的话
d = "Carlos Marisol"
Run Code Online (Sandbox Code Playgroud)
对于字典中出现的字符串中的每个单词,我想将相应的值相加。
输出应该是这样的:
2306364
Carlos Marisol
Run Code Online (Sandbox Code Playgroud)
我制作的代码如下:
l = {"Carlos": 1131577, "Rodrigo": 3250239, "Marisol": 1174787}
d = "Carlos Marisol"
a = d.split(' ')
n = 0
h = ""
f = len(a)
for k, v in l.items():
if k == a[0] or k == a[1]:
n += v
h += k + " "
print(n)
print(h)
Run Code Online (Sandbox Code Playgroud)
输出如下:
2306364
Carlos Marisol
Run Code Online (Sandbox Code Playgroud)
如您所见,它可以工作,但可以这么说是手动的。
if k == a[0] or k == a[1]:
Run Code Online (Sandbox Code Playgroud)
变量a: a[0],a[1]必须根据其位置可迭代,因为添加另一个数据不起作用,我该怎么做?
因为使用这些数据它不能正常工作:
l = {"Rodrigo": 2155029, "Sebastian": 3290180, "Camilo": 4271313, "Marisol": 2964688}
d = "Marisol Sebastian Ana Camilo"
Run Code Online (Sandbox Code Playgroud)
您正在向后使用字典。字典用于查找,列表用于迭代。有很多方法可以处理丢失密钥的情况。
在下面的示例中,我使用的是内置sum函数,而不是像这样编写循环
n = 0
for w in d.split():
n += d.get(w, 0)
Run Code Online (Sandbox Code Playgroud)
如果你所有的名字都在字典里,你可以直接查找:
sum(l[w] for w in d.split())
Run Code Online (Sandbox Code Playgroud)
另一方面,如果不能保证你的名字在l你可以使用l.get:
sum(l.get(w, 0) for w in d.split())
Run Code Online (Sandbox Code Playgroud)
这将返回10526181您的第二个示例。
另一种方法是使用collections.defaultdictfor l,因为默认int值为 0:
l = collections.defaultdict(int, l)
sum(map(l.__getitem__, d.split()))
Run Code Online (Sandbox Code Playgroud)
这个sum公式等同于第一个公式,但不会因为defaultdict.
要获取包含字典中所有名称的字符串,您可以使用简单的单行:
' '.join(w for w in d.split() if w in l)
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用filter:
' '.join(filter(l.__contains__, d.split()))
Run Code Online (Sandbox Code Playgroud)