比较字典python中的列表

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)

Mad*_*ist 6

您正在向后使用字典。字典用于查找,列表用于迭代。有很多方法可以处理丢失密钥的情况。

在下面的示例中,我使用的是内置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)