如何将列表转换为字典,其中某些键缺少其值?

时间:2019-03-19 20:59:58

标签: python dictionary try-except

我有一个对象列表,其数量在分号后关联。试图将此列表转换为字典,但某些键一旦转换将丢失其值。使用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

任何建议都值得赞赏。

4 个答案:

答案 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'}