我有一本字典,其值为:
{"a": 1, "b": 2, "c": 3}
我想将键b
重命名为B
,而又不会失去其第二位。在Python 3.7及更高版本中,字典保留插入顺序,因此可以指望键的顺序,并可能表示某些含义。我要寻找的最终结果是:
{"a": 1, "B": 2, "c": 3}
显而易见的代码将运行:
>>> dictionary["B"] = dictionary.pop("b")
{'a': 1, 'c': 3, 'B': 2}
但是,这不能保留所需的顺序。
答案 0 :(得分:4)
foo = {'c': 2, 'b': 4, 'J': 7}
foo = {key if key != 'b' else 'B': value for key, value in foo.items()}
foo
Out[7]: {'c': 2, 'B': 4, 'J': 7}
答案 1 :(得分:1)
#include <stdio.h>
char* howdy(int arg) { printf(">howdy: arg = %d\n", arg); return "howdy"; }
char* goodbye(int arg) { printf(">goodbye: arg = %d\n", arg); return "goodbye"; }
typedef char* (*Charpfunc)(int arg);
void print(Charpfunc* p, int *arg)
{
while (*p) {
puts((*p)(*arg));
p++;
arg++;
}
}
int main()
{
Charpfunc funcs[] = {
howdy, goodbye, NULL
};
int arg111[] = { 1, 11 };
int arg222[] = { 2, 22 };
print(funcs, arg111);
print(funcs, arg222);
return 0;
}
您可以在 if 语句
中设置所需的任何值。答案 2 :(得分:1)
此解决方案就地修改了字典d
。如果不关心性能,则可以执行以下操作:
d = {"a": 1, "b": 2, "c": 3}
replacement = {"b": "B"}
for k, v in d.items():
d[replacement.get(k, k)] = d.pop(k)
print(d)
输出
{'a': 1, 'B': 2, 'c': 3}
请注意,上述解决方案适用于任意数量的要更换的钥匙。
答案 3 :(得分:1)
作为现有答案的一种变体,该变体也可以多次替换,您可以定义另一个字典,该字典显示用该其他键替换的键:
>>> d = {"a": 1, "b": 2, "c": 3}
>>> repl = {"b": "B"}
>>> {repl.get(k, k): d[k] for k in d}
{'a': 1, 'B': 2, 'c': 3}
当然,这仍然会创建一个新字典,而不是更新现有字典,因此需要O(n),但对于需要更新的所有键,它至少只执行一次。