我正在尝试在Python中执行以下操作:
#include <stdio.h>
#include <stdlib.h>
#define cats 3
#define loops 30
int main() {
int (*a)[loops] = malloc(sizeof(*a) * loops);
if (a != NULL) {
for (i = 0; i < cats; i++) {
for (j = 0; j < loops; j++)
a[i][j] = i + j;
}
for (i = 0; i < cats; i++) {
for (j = 0; j < loops; j++)
printf("%d ", a[i][j]);
printf("\n");
}
free(a);
}
return 0;
}
但是,Python不允许我将多个dict1 = {
'a': 2,
'b': 3,
'c': 5,
}
dict2 = {
'd': 2,
'e': 3,
}
def do_sum(**dict1, **dict2):
print(dict1['a'] + dict1['b'] + dict2['d'])
do_sum(**dict1, **dict2)
传递给一个函数。我也尝试这样做,但是出现错误:
**kwargs
如何实现功能中的操作?基本上,我想传递多个字典,但只希望访问其中的某些值。
答案 0 :(得分:1)
您可以像这样通过字典本身:
dict1 = {
'a': 2,
'b': 3,
'c': 5,
}
dict2 = {
'd': 2,
'e': 3,
}
def do_sum(dict1, dict2):
print(dict1['a'] + dict1['b'] + dict2['d'])
do_sum(dict1, dict2)
这实际上与您要执行的操作完全相同,**仅对字典进行解构,然后函数再次对其进行重建。因此,这也更快。 如果您真的想做自己的风格,可以使用dict.update()合并两个字典。像这样:
import copy
dict1 = {
'a': 2,
'b': 3,
'c': 5,
}
dict2 = {
'd': 2,
'e': 3,
}
def do_sum(**dict3):
print(dict3['a'] + dict3['b'] + dict3['d'])
dict3 = copy.copy(dict1)
dict3.update(dict2)
do_sum(**dict3)
编辑: 正如jonrsharpe指出的那样,您无需构建dict3。代码如下:
dict1 = {
'a': 2,
'b': 3,
'c': 5,
}
dict2 = {
'd': 2,
'e': 3,
}
def do_sum(**dict3):
print(dict3['a'] + dict3['b'] + dict3['d'])
do_sum(**dict1, **dict2)