我有一个对象列表,其数量在分号后关联。试图将此列表转换为字典,但某些键一旦转换将丢失其值。使用try / except尝试过,但不确定如何将值分别存储到字典中。
示例:
t = ['Contact:10', 'Account:20','Campaign:', 'Country:', 'City:']
转化时,Campaign和Country对象将没有值。我想通过或分配一个NaN
作为字典值。
我尝试了类似的方法,但无济于事。
for objects in t:
try:
dictionary = dict(objects.split(":") for objects in t)
except:
pass
任何建议都值得赞赏。
答案 0 :(得分:8)
您真的不需要尝试/抓住:
for item in your_data['items']:
id = item['id']
title = item['snippet']['title']
print(id, title)
这将产生:
t = ['Contact:10', 'Account:20','Campaign:', 'Country:', 'City:']
{ a: b for a,b in (i.split(':') for i in t) }
如果要使用{'Account': '20', 'Campaign': '', 'City': '', 'Contact': '10', 'Country': ''}
而不是空字符串:
None
答案 1 :(得分:7)
您可以将生成器表达式与每个项目分开使用,并将输出传递到dict
构造函数:
dict(i.split(':') for i in t)
这将返回:
{'Contact': '10', 'Account': '20', 'Campaign': '', 'Country': '', 'City': ''}
如果您希望将NaN设置为默认值,则可以使用dict理解来实现:
{a: b or float('nan') for i in t for a, b in (i.split(':'),)}
这将返回:
{'Contact': '10', 'Account': '20', 'Campaign': nan, 'Country': nan, 'City': nan}
答案 2 :(得分:1)
如果缺少该值,它将是一个空字符串
$('.default-date-picker').datepicker({
format: 'mm/dd/yyyy',
autoclose: true
});
$("#myButton").click(function () {
$("#myDatePicker").focus();
$("#myDatePicker").datepicker('hide');
});
$("#myDatePicker").click(function () {
$("#myDatePicker").focus();
});
因此,这导致了我们
var loopRequests = function(offset){
return $http.get($scope.baseUrl, {
params: {
offset: offset,
limit: 100,
ts: $scope.timeStamp,
apikey: $scope.publicKey,
hash: $scope.hash
}});
}
var promises = [];
for(var i = 0; i < 2; i++){
$scope.offsetParam += 100;
promises.push(loopRequests($scope.offsetParam));
}
$q.all(promises).then(results => console.log(results))
这可以通过字典理解来解决。
>>> 'foo:'.split(':')
['foo', '']
您也可以拒绝将这些键放在字典中
data = {}
for pair in t:
key, value = pair.split(':')
data[key] = int(value) or float('nan')
答案 3 :(得分:0)
t = ['Contact:10', 'Account:20','Campaign:', 'Country:', 'City:']
d = {}
for obj in t:
field = obj.split(':')
d[field[0]] = field[1] if field[1] else None
print(d)
输出:
{'Country': '', 'City': '', 'Campaign': '', 'Account': '20', 'Contact': '10'}