我有两个Python字典,我想编写一个返回这两个字典的表达式,合并.update()如果它返回结果而不是就地修改dict,那么该方法将是我需要的.
>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 10, 'c': 11}
>>> z = x.update(y)
>>> print(z)
None
>>> x
{'a': 1, 'b': 10, 'c': 11}
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得最终合并的词典z,不是x吗?
(要清楚的是,最后一次胜利的冲突处理dict.update()也是我正在寻找的.)
我想在python中将项添加到现有字典中.例如,这是我的字典:
default_data = {
'item1': 1,
'item2': 2,
}
Run Code Online (Sandbox Code Playgroud)
我想添加新项目,以便:
default_data = default_data + {'item3':3}
Run Code Online (Sandbox Code Playgroud)
怎么做到这一点?
字典在Python 3.6中排序(至少在CPython实现下),与之前的版本不同.这似乎是一个重大变化,但它只是文档中的一小段.它被描述为CPython实现细节而不是语言特性,但也暗示这可能成为未来的标准.
在保留元素顺序的同时,新字典实现如何比旧字典实现更好?
以下是文档中的文字:
dict()现在使用PyPy开创的"紧凑"表示.与Python 3.5相比,新dict()的内存使用量减少了20%到25%.PEP 468(在函数中保留**kwargs的顺序.)由此实现.这个新实现的顺序保留方面被认为是一个实现细节,不应该依赖(这可能会在未来发生变化,但是在更改语言规范之前,希望在几种版本的语言中使用这个新的dict实现为所有当前和未来的Python实现强制命令保留语义;这也有助于保持与随机迭代顺序仍然有效的语言的旧版本的向后兼容性,例如Python 3.5).(由INADA Naoki在issue 27350中提供.最初由Raymond Hettinger提出的想法.)
2017年12月更新:Python 3.7 保证了dict保留插入顺序
如何将键,值对添加到字典?.我提到以下格式?
{'1_somemessage': [[3L,
1L,
u'AAA',
1689544L,
datetime.datetime(2010, 9, 21, 22, 30),
u'gffggf'],
[3L,
1L,
u'BBB',
1689544L,
datetime.datetime(2010, 9, 21, 20, 30),
u'ffgffgfg'],
[3L,
1L,
u'CCC',
1689544L,
datetime.datetime(2010, 9, 21, 22, 30),
u'hjhjhjhj'],
[3L,
1L,
u'DDD',
1689544L,
datetime.datetime(2010, 9, 21, 21, 45),
u'jhhjjh']],
'2_somemessage': [[4L,
1L,
u'AAA',
1689544L,
datetime.datetime(2010, 9, 21, 22, 30),
u'gffggf'],
[4L,
1L,
u'BBB',
1689544L,
datetime.datetime(2010, 9, 21, 20, 30),
u'ffgffgfg'],
[4L,
1L,
u'CCC',
1689544L,
datetime.datetime(2010, 9, 21, 22, 30),
u'hjhjhjhj'],
[4L,
1L,
u'DDD',
1689544L,
datetime.datetime(2010, 9, 21, …Run Code Online (Sandbox Code Playgroud) 我对以下python表达式很感兴趣:
d3 = dict(d1, **d2)
Run Code Online (Sandbox Code Playgroud)
任务是将2个词典合并为第三个词典,上面的表达式完成任务就好了.我对**运算符感兴趣,它对表达式究竟做了什么.我认为**是功率运算符,还没有看到它在上面的上下文中使用过.
完整的代码片段是这样的:
>>> d1 = {'a': 1, 'b': 2}
>>> d2 = {'c': 3, 'd': 4}
>>> d3 = dict(d1, **d2)
>>> print d3
{'a': 1, 'c': 3, 'b': 2, 'd': 4}
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个将条目添加到json文件的函数.最终,我想要一个看起来像的文件
[{"name" = "name1", "url" = "url1"}, {"name" = "name2", "url" = "url2"}]
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的:
def add(args):
with open(DATA_FILENAME, mode='r', encoding='utf-8') as feedsjson:
feeds = json.load(feedsjson)
with open(DATA_FILENAME, mode='w', encoding='utf-8') as feedsjson:
entry = {}
entry['name'] = args.name
entry['url'] = args.url
json.dump(entry, feedsjson)
Run Code Online (Sandbox Code Playgroud)
这确实创建了一个条目,如{"name"="some name", "url"="some url"}.但是,如果我add再次使用此函数,使用不同的名称和URL,则第一个被覆盖.我需要做什么才能将第二个(第三个......)条目附加到第一个?
编辑:对这个问题的第一个答案和评论指出了一个显而易见的事实,即我没有feeds在写块中使用.不过,我不知道该怎么做.例如,以下显然不会这样做:
with open(DATA_FILENAME, mode='a+', encoding='utf-8') as feedsjson:
feeds = json.load(feedsjson)
entry = {}
entry['name'] = args.name
entry['url'] = args.url
json.dump(entry, feeds)
Run Code Online (Sandbox Code Playgroud) 我在Python中有一个家庭作业问题.
我在Linux上使用Python 3.4.0版.
设计文档声明我要使用内置函数读取CSV文件,这些函数指定为names.dat,格式如下:
name:name2, name:name3, name2:name4, name3:name5\n (etc)
Run Code Online (Sandbox Code Playgroud)
然后我将这些关键字对添加到字典中,这是我坚持的部分.
我到目前为止的代码是这样的:
dictionary = dict()
database = open('names.dat', 'r')
data = database.read()
data = data.rstrip('\n')
data = data.split(',')
for item in range(len(data)):
dictionary.update(data[item-1])
Run Code Online (Sandbox Code Playgroud)
我的想法是,如果我有一个格式为"name:name2"的列表元素,并且我将该元素作为参数调用字典更新函数,它将正确映射到字典中的关键字对.
但是,情况并非如此,因为我在运行此脚本时遇到此错误:
File "MyName.py", line 7, in <module>
dictionary.update(data[item-1])
ValueError: dictionary update sequence element #0 has length 1; 2 is required
Run Code Online (Sandbox Code Playgroud)
我有这本字典:
appointment = { soccer = {
day : 20,
month : april
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能在同一结构中插入这个字典?
appointment = { gym = {
day : 5,
month : may
}
}
Run Code Online (Sandbox Code Playgroud)
预期输出:
appointment = { soccer = {
day : 20,
month : april
},
gym = {
day : 5,
month : may
}
}
Run Code Online (Sandbox Code Playgroud)
我如何通过代码连接这个dictio?
我有以下方法:
public static List<Integer> gradingStudents(List<Integer> grades) {
for(int i = 0; i < grades.size(); i++){
if(grades.get(i) < 40)
continue;
else if(grades.get(i) % 5 < 3)
grades.get(i) = grades.get(i) + (Math.abs(grades.get(i)%5-5));
else
continue;
}
return grades;
}
Run Code Online (Sandbox Code Playgroud)
我在else if部分遇到了意外的类型错误。为什么我不能grades像上面代码中写的那样更改 的元素?
我有一本空字典
d = {}
Run Code Online (Sandbox Code Playgroud)
我有这些变量:
key = "foo"
value = 1
Run Code Online (Sandbox Code Playgroud)
我想将它们作为key和value变量添加到字典中,因为它们可以在 for 循环中更改。正确的语法应该是什么?
python ×10
dictionary ×5
python-3.x ×2
csv ×1
items ×1
java ×1
json ×1
merge ×1
operators ×1
python-3.6 ×1
syntax ×1