如果我这样做:
x1={'Count': 11, 'Name': 'Andrew'}
x2={'Count': 14, 'Name': 'Matt'}
x3={'Count': 17, 'Name': 'Devin'}
x4={'Count': 20, 'Name': 'Andrew'}
x1
vars=[x1,x2,x3,x4]
for i in vars:
my_dict[i[group_by_column]]=i
my_dict
然后我得到:
defaultdict(int,
{'Andrew': {'Count': 20, 'Name': 'Andrew'},
'Devin': {'Count': 17, 'Name': 'Devin'},
'Geoff': {'Count': 10, 'Name': 'Geoff'},
'Matt': {'Count': 14, 'Name': 'Matt'}})
这正是我想要的。
但是,当我尝试从内置yield
的对象复制它时,它会在字典中保留重写值。例如,cast_record_stream
是一个函数结果,它根据请求生成以下字典:
{'Count': 11, 'Name': 'Andrew'}
{'Count': 14, 'Name': 'Matt'}
{'Count': 17, 'Name': 'Devin'}
{'Count': 20, 'Name': 'Andrew'}
{'Count': 5, 'Name': 'Geoff'}
{'Count': 10, 'Name': 'Geoff'}
那么当我运行这个函数时出错了:
for line in cast_record_stream:
record_name=line['Name']
my_dict[record_name]=line
defaultdict(<type 'int'>, {'Devin': {'Count': 10, 'Name': 'Geoff'},
'Matt': {'Count': 10, 'Name': 'Geoff'},
'Geoff': {'Count': 10, 'Name': 'Geoff'},
'Andrew': {'Count': 10, 'Name': 'Geoff'}})
我在这里创造了一个我看不到的问题吗?我想它一次只能添加一个值。
答案 0 :(得分:0)
我无法重现您的问题。这是一个完整的复制品,除了它完美的工作。这表明您在OP中描述的想法是正确的,并且您在实际代码中还有其他一些错误。
$(function() {
var svg = d3.select("#mySVG")
.call(d3.zoom().on("zoom", function () {
svg.attr("transform", "translate(" + d3.event.transform.x + " " + d3.event.transform.y + ") scale(" + d3.event.transform.k + ")");
}));
// For test purposes
//$('#mySVG').css('transform', 'scale(2)');
});
根据下面评论中的讨论,我认为你有时会存储record_name = line [&#39; Name&#39;],但有时它不会更新,因为你正在迭代你不应该的东西,可能导致for循环永远不会执行更新record_name的行。
答案 1 :(得分:-1)
有几个问题。首先,我假设cast_record_stream是一个函数,所以你的第一行应该是
for line in cast_record_stream():
词典不能有重复的键。如果你的迭代器返回两个Geoff,后者将始终覆盖前者。如果您希望有重复的名称,您可能应该考虑使用不同的方法来存储数据而不是字典。
[R