在Python中,我有一个字典列表:
mylist = [ { 'name': 'James', 'school': 'UCLA', 'date_joined': 2001 },
{ 'name': 'Jack', 'school': 'UCLA', 'date_joined': 2001 },
{ 'name': 'Fisher', 'school': 'NYU', 'date_joined': 2003 }]
Run Code Online (Sandbox Code Playgroud)
如何仅根据名称和学校密钥/值检查某个词典是否与现有记录匹配?
所以:
example1 = { 'name': 'James', 'school': 'UCLA', 'date_joined': 2007 }
example1 = { 'name': 'James', 'school': 'UCLA', 'date_joined': 2001 }
Run Code Online (Sandbox Code Playgroud)
应该都匹配,但是
example3 = { 'name': 'James', 'school': 'MIT', date_joined': 2001 }
Run Code Online (Sandbox Code Playgroud)
不应该。
显然有:
for m in myList:
if (m['name']==example['name'] and m['school']==example['school']):
match_found = True
continue
Run Code Online (Sandbox Code Playgroud)
但是有没有更紧凑的方法?
我想使用客户端JavaScript来查找一组纬度+经度(实际上是Google LatLng对象)的质心,使用简单的平均值计算.
我看到之前在Stack Overflow上已经多次询问过类似的问题,但我找不到一个直截了当的JavaScript答案.(这可能只是我的谷歌搜索失败,如果这是重复的道歉.)
我有类似的东西,但它不适用于平均纬度为179和-179的情况,因此质心应该是180而不是0.
var avg_lat, avg_lng;
for (var i = 0; i < google_latlngs.length; i++) {
avg_lat += google_latlngs[0].lat();
avg_lng += google_latlngs[1].lng();
}
avg_lat = avg_lat / google_latlngs.length;
avg_lng = avg_lng / google_latlngs.length;
Run Code Online (Sandbox Code Playgroud)
我需要在客户端JavaScript中有效地执行此操作,并且我的点数不可能超过几公里,因此在这种情况下,大圆距离或任何花哨都不是必需的.
谢谢你的帮助.
更新:好的,任何在JavaScript中查找质心的方法都可以.
对不起,这几乎肯定是重复的,但我一直在搜索StackOverflow并且无法找到答案.希望如果我用最一般的术语来表达它,它将来会帮助别人.
我在我的网页中包含一些脚本,这些脚本在Chrome/FF/Opera/Safari/IE9中非常出色,但与IE8或以下版本不兼容(对于信息,它是非常棒的D3.js).
如何使用确保页面在IE <9中正常失败?
理想情况下,我更喜欢IE <9用户
HTML页面中的当前代码:
<script type="text/javascript" src="/js/d3.js"></script>
<script type="text/javascript" src="/js/mylocal.js"></script>
Run Code Online (Sandbox Code Playgroud)
在JavaScript文件中,从开头行:
var vis = d3.select("#vis")
.append("svg:svg")
.attr("width", w)
.attr("height", h)
.append("svg:g");
// etc
Run Code Online (Sandbox Code Playgroud)
我应该如何更改这些以确保只有支持D3的浏览器才会下载并尝试执行它?
我正在学习D3.js并试图了解与流程图一起使用的数据键.我想改编一下官方的流图示例:

...以便每个路径都有一个显式数据键,以便鼠标悬停记录数据键.
官方示例添加路径如下:
var area = d3.svg.area()
.x(function(d) { console.log('x', d.data); return d.x * w / mx; })
.y0(function(d) { return h - d.y0 * h / my; })
.y1(function(d) { return h - (d.y + d.y0) * h / my; });
vis.selectAll("path")
.data(data0)
.enter().append("path")
.style("fill", function() { return color(Math.random()); })
.attr("d", area);
Run Code Online (Sandbox Code Playgroud)
我尝试调整代码如下,但我不知道如何更改data0(当前是数组的数组)的结构来实现我想要的:
vis.selectAll("path")
.data(data0, function(d) { return d.name }) // Add key function
.enter().append("path")
.style("fill", function() { return color(Math.random()); })
.attr("d", area) …Run Code Online (Sandbox Code Playgroud) 我正在使用jQuery捕获复选框上的单击事件并调用函数.
我的问题是这样的:我正在调用的函数执行起来相对较慢,因此用户在复选框看起来被检查之前看到了可见的延迟,这使得界面看起来缓慢且不优雅.
这个小提琴演示了这个问题:http://jsfiddle.net/ZkUgq/4/或这里的代码:
function slowFunction() {
var mystr;
for (var i = 0; i < 5000000; i++) {
mystr += ' ';
}
}
$('#mycheckbox').click(function() {
slowFunction();
});
Run Code Online (Sandbox Code Playgroud)
有没有办法可以改变事物,以便点击事件仍然会触发slowFunction,但是不会延迟复选框中勾号的出现?
理想情况下,我想要的是onChecked复选框的事件,但我不知道是否存在.
注意:我问的原因是因为我使用的是iPhone复选框,而且当我的复选框更改时我调用的功能相对较慢使它看起来很迟钝,而且根本不像iPhone那样:)
我正在尝试使用带有Python和JSON的Google Maps地理编码器,但一直被告知我有一个错误的请求:
add = "Buckingham Palace, London, SW1A 1AA"
geocode_url = "https://maps.googleapis.com/maps/api/geocode/json?address=%s&sensor=false®ion=uk" % add
print geocode_url
req = urllib2.urlopen(geocode_url)
jsonResponse = json.loads(f.read())
pprint.pprint(nest)
Run Code Online (Sandbox Code Playgroud)
这失败了urllib2.HTTPError: HTTP Error 400: Bad Request.
但如果我只是复制和粘贴
https://maps.googleapis.com/maps/api/geocode/json?address=Buckingham%20Palace,%20London,%20SW1A%201AA&sensor=false®ion=uk
Run Code Online (Sandbox Code Playgroud)
进入浏览器栏,它工作正常.
我的要求有什么问题?
为了获得最大的加载速度和页面效率,最好是:
var myname = jsonobj[1]['name'])。var nameidx = titles.getPos('name'); var myname = jsonobj[1][nameidx]。我并不是真的期望有人给我一个明确的答案,但一般性的怀疑会非常有用。或者有关如何测量的提示 - 也许我可以使用开发人员工具检查加载速度和效率之间的权衡。
我怀疑,在 (1) 中使用本机 JavaScript 对象带来的任何额外效率都会被小得多的 CSV 文件所抵消,但我想知道其他人是否也这么认为。
我想在 JavaScript 中找到数组元素位置的所有唯一组合。
这是我的数组:
var places = ['x', 'y', 'z'];
Run Code Online (Sandbox Code Playgroud)
我想找到以下组合:[0,1]、[0,2]、[1,2]。
目前我有功能但有点笨拙:
for (var i = 0; i < places.length; i++) {
for (var j = 0; j < places.length; j++) {
if ((j > i) && (j != i)) {
console.log(i, j);
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更简洁的方法来做到这一点?
我刚刚开始使用Require.JS,我有一个(希望)简单的问题.
我正在使用jQuery和SlickGrid,我已将所有模块加载到main.js文件的顶部,如下所示:
require(["jquery", "underscore-1.3.1", "backbone-0.9.1",
"plugins/jquery.event.drag-2.0.min", "plugins/slick.core",
"plugins/slick.grid", "plugins/slick.dataview"], function($) { ...
Run Code Online (Sandbox Code Playgroud)
这在Chrome和Firefox中运行正常,但在Safari中我收到一些错误警告:
SlickGrid requires jquery.event.drag module to be loaded
require-jquery.js:1632Error: Module name 'underscore' has not been loaded yet
for context: _http://requirejs.org/docs/errors.html#notloaded
Run Code Online (Sandbox Code Playgroud)
SlickGrid依赖于jquery.event.drag而Backbone依赖于Underscore,看起来Safari不喜欢它们无法看到对方.
难道我做错了什么?有没有办法可以解决这个问题?
我正在尝试使用Python Mechanize 抓取.aspx网页.但ParseError: unexpected '[' char in declaration即使我手动删除DTD,我仍然会收到一个有趣的错误.
这是我的完整代码:
url = 'http://corporate.marksandspencer.com/aboutus/where/international_stores'
browser = mechanize.Browser()
browser.open(url)
browser.select_form(nr=0)
Run Code Online (Sandbox Code Playgroud)
它ParseError: unexpected '[' char in declaration在最后一行失败了.任何人都可以建议可能出错的地方?
javascript ×7
python ×3
google-maps ×2
jquery ×2
arrays ×1
csv ×1
d3.js ×1
geocoding ×1
geospatial ×1
html ×1
json ×1
mechanize ×1
permutation ×1
requirejs ×1
stream-graph ×1
web-scraping ×1