小编Cas*_*all的帖子

从python字典中删除重复键但总结值

我在python中有一本字典

d = {tags[0]: value, tags[1]: value, tags[2]: value, tags[3]: value, tags[4]: value}
Run Code Online (Sandbox Code Playgroud)

想象这个dict大10倍,它有50个键和50个值.可以在此标签中找到重复项,但即使这样,值也是必不可少的.我怎样才能简单地修剪它以重新获得新的字典而不需要复制键,而是使用值的总和?

d = {'cat': 5, 'dog': 9, 'cat': 4, 'parrot': 6, 'cat': 6}

结果

d = {'cat': 15, 'dog': 9, 'parrot': 6}

python duplicates

2
推荐指数
2
解决办法
7160
查看次数

&"string"与"string"的地址相同吗?

我有一些生成的C代码,如下所示:

char *example[] = {&" ",&"\n", &"\t"};
Run Code Online (Sandbox Code Playgroud)

如果我自己写这个,我会丢掉&符号(&),因为字符串文字已经是类型char *.对我来说,看起来example 应该已经生成声明为char**[].

我可以确定指针是否与&s 相同?这是否取得了C中定义好的地址?

编辑:我正在调查当前生命周期中某些不接受任何更改的软件的警告.是否printf("%p", &"hello world");总是一样的printf("%p", "hello world");,还是这依赖于编译器?

c string c-strings memory-address

2
推荐指数
1
解决办法
103
查看次数

C是否对目标文件做出任何保证?

我有一些我想要更改的C代码,但我想使用#ifdefs以便可以编译旧的目标文件(后预处理代码不会更改).出于某些原因(编译几个平台和认证原因),我需要保持目标文件相同(除了任何时间戳).

C语言规范或任何C编译器是否对重新编译有任何保证?我一直在做一些谷歌搜索,但我还没有找到关于这个主题的任何内容.

例如:

main.c中

int main() {
    printf("Hello World!\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

main.h(新文件)

#ifdef DEBUG
    char some_buffer[1000];
    #define PRINTF(S) (sprintf(some_buffer, S))
#else
    #define PRINTF(S) (printf(S))
#endif
Run Code Online (Sandbox Code Playgroud)

main.c(更新文件)

#include "main.h"

int main() {
    PRINTF("Hello World!\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我编译DEBUG更新main.c中没有定义的,现在包括main.h,不C语言规范或任何C编译器作任何保证该目标文件将是相同的?

c macros compilation object-files c-preprocessor

2
推荐指数
1
解决办法
81
查看次数

Ada - 用于递增范围结束的任何已定义行为?

如果我将ADA中的范围定义为1 ... 1000,那么如果我增加超过1000,ADA规范是否存在已定义的行为?

例如:

type Index is range 1..1000;

idx : Index := 1;

procedure Increment is 
begin
  idx := idx + 1;
end
Run Code Online (Sandbox Code Playgroud)

一旦我用idx = 1000调用Increment,我应该发生什么?

  • 环绕(idx = 1)
  • 超出范围的例外
  • 未定义的行为
  • 别的什么?

ada range

2
推荐指数
1
解决办法
136
查看次数

C++中的2D int数组

所以我想非常快地初始化一个int 2d数组,但我无法弄清楚如何做到这一点.我做了一些搜索,没有人说如何初始化2D数组,除了:

int [SOME_CONSTANT][ANOTHER_CONSTANT] = {{0}};
Run Code Online (Sandbox Code Playgroud)

基本上,我有8个顶点,我在一个数组中列出了一个立方体每个面的4个顶点.我试过这个:

int[6][4] sides = {{0, 1, 2, 3}, {4, 5, 6, 7}, {0, 4, 7, 3}, {7, 6, 2, 3}, {5, 1, 2, 6}, {0, 1, 5, 4}};
Run Code Online (Sandbox Code Playgroud)

但这告诉我,"侧面"有一个错误,它预计会出现分号.有没有办法像这样快速初始化一个数组?

谢谢!

c++ initialization multidimensional-array

1
推荐指数
2
解决办法
2万
查看次数

有一个班级充当dict?

我有一个像这样定义的类:

class GameState:

    def __init__(self, state=None):
        if state is None:
            self.fps = 60
            self.speed = 1
            self.bounciness = 0.9
            self.current_level = None

            self.next_frame_time = 0
            self.init_time = 0
            self.real_time = 0
            self.game_time = 0

            self.game_events = []
            self.real_events = []
        else:
            # THIS being the key line:
            self.__dict__.update(**state)
Run Code Online (Sandbox Code Playgroud)

是否有我可以定义的接口,这样就可以了(即**运算符适用于我的类):

>>> a = GameState()
>>> b = GameState(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: update() argument after ** must be a mapping, not GameState
Run Code Online (Sandbox Code Playgroud)

从本质上讲,我想要 …

python python-3.x

0
推荐指数
1
解决办法
568
查看次数