对于python dicts,测试相等的工作正常如下:
first = {"one":"un", "two":"deux", "three":"trois"}
second = {"one":"un", "two":"deux", "three":"trois"}
print(first == second) # Result: True
Run Code Online (Sandbox Code Playgroud)
但现在我的第二个dict包含一些我想忽略的附加键:
first = {"one":"un", "two":"deux", "three":"trois"}
second = {"one":"un", "two":"deux", "three":"trois", "foo":"bar"}
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来测试第一个字典是否是第二个字典的一部分,包括它的所有键和值?
编辑1:
怀疑这个问题是如何测试字典是否包含某些键的重复,但我对测试键及其值感兴趣.只包含相同的键不会使两个dicts相等.
编辑2:
好的,我现在用四种不同的方法得到了一些答案,证明了所有这些方法都有效.由于我需要一个快速的过程,我测试了每个执行时间.我创建了三个相同的词组,包含1000个项目,键和值是长度为10的随机字符串.second并且third获得了一些额外的键值对,并且third获得了新值的最后一个非额外键.所以,first是second,但不是的一部分third.使用timeit10000次重复的模块,我得到:
Method Time [s]
first.viewitems() <=second.viewitems() 0.9
set(first.items()).issubset(second.items()) 7.3
len(set(first.items()) & set(second.items())) == len(first) 8.5
all(first[key] == second.get(key, sentinel) for key in first) 6.0
Run Code Online (Sandbox Code Playgroud)
我猜测最后一种方法是最慢的,但它已经到位2.但方法1击败了它们.
谢谢你的回答!
我的makefile中的一个目标是一个非常耗时且耗时的任务.但我可以分开工作负载并多次并行运行任务,以加快整个过程.
我的问题是make不等待所有进程完成.
考虑这个简单的脚本,名为myTask.sh:
#!/bin/bash
echo "Sleeping $1 seconds"
sleep $1
echo "$1 are over!"
Run Code Online (Sandbox Code Playgroud)
现在,让我们从bash脚本中调用它,并wait用来等待所有任务完成:
#!/bin/bash
echo "START"
./myTask.sh 5 &
./myTask.sh 15 &
./myTask.sh 10 &
wait # Wait for all tasks to complete
echo "DONE"
Run Code Online (Sandbox Code Playgroud)
输出如预期:
START
Sleeping 15 seconds
Sleeping 5 seconds
Sleeping 10 seconds
5 are over!
10 are over!
15 are over!
DONE
Run Code Online (Sandbox Code Playgroud)
但是在尝试相同的时候Makefile:
test:
echo "START"
./myTask.sh 5 &
./myTask.sh 15 &
./myTask.sh 10 &
wait
echo "DONE" …Run Code Online (Sandbox Code Playgroud)