python如何实现以下数据格式转换?

时间:2017-06-09 06:40:55

标签: python list dictionary

我想实现一个处理以下数据的函数:'d'并生成'L'。如何实现?

def func(**d):
   'do something'
    return [....]

来源:

   d = {'a': 1, 'b': 2, 'c': [3, 4, 5]} 

   d = {'a': 1, 'b': 2, 'c': [3, 4, 5], 'd': [6, 7]}

TO:

  L=[{'a':1,'b':2,'c':3},
   {'a':1,'b':2,'c':4},
   {'a':1,'b':2,'c':5}]

  L=[{'a': 1, 'b': 2, 'c': 3, 'd': 6},
    {'a': 1, 'b': 2, 'c': 3, 'd': 7},
    {'a': 1, 'b': 2, 'c': 4, 'd': 6},
    {'a': 1, 'b': 2, 'c': 4, 'd': 7},
    {'a': 1, 'b': 2, 'c': 5, 'd': 6},
    {'a': 1, 'b': 2, 'c': 5, 'd': 7}]

3 个答案:

答案 0 :(得分:1)

pattern1 = re.compile(r'<span\sclass="count">[^<\d]*(\d+)[^<\d]*</', re.S)

基本上,我在这里做的是:

  • 我创建了一本字典副本&#39; d&#39;命名为&#39; temp_d&#39;;
  • 我浏览了&lt; temp_d&#39;中的每一个键。字典,并创建一个空的;
  • 我再次循环通过&#39; d&#39;中的所有按键。字典,基本上我验证循环的当前键的值是否是列表,如果是,我将键添加到字典&#39; item&#39;使用列表的第一个值,使用函数pop(index)(此函数从列表中删除元素并返回它)。如果当前键的值不是列表,则只需将该键添加到带有值的dict中。
  • 填写字典&#39;项目后,我将其附加到&#39; L&#39;

在这种情况下的示例:

d = {'a': 1, 'b': 2,' c': [3, 4, 5]}

temp_d = d
L = []
for key in temp_d:
  item = {} 
  for key in temp_d:
      if isinstance(temp_d[key], list):
        item[key]  = temp_d[key].pop(0)
      else:
        item[key]  = temp_d[key] 
  L.append(item)
等到最后。

答案 1 :(得分:0)

这适用于python 3:

d = {'a': 1, 'b': 2, 'c': [3, 4, 5]}
def f(**d):
    return [{**d, 'c': i} for i in d.pop('c')]

答案 2 :(得分:0)

您的问题可以解决如下:

from itertools import cycle

def func(indict):
    dictlist = [dict(indict)] # make copy to not change original dict
    for key in indict: # loop keys to find lists
        if type(indict[key]) == list:
            listlength = len(indict[key])
            dictlist = listlength * dictlist # elements are not unique
            for dictindex, listelement in zip(range(len(dictlist)), cycle(indict[key])):
                dictlist[dictindex] = dict(dictlist[dictindex]) # uniquify
                dictlist[dictindex][key] = listelement # replace list by list element
    return dictlist

在一般情况下,你的dict中可以有多个列表。我的解决方案假设您要展开所有这些。

查看解决方案的详细信息,首先将原始字典的副本添加到dictlist然后循环元素,每当找到列表时,它会将dictlist与找到的列表的长度。这将确保dictlist包含正确数量的元素。

但是,元素不会是唯一的,因为它们将引用相同的基础dicts。

为了解决这个问题,dict列表的元素是&#34; unquified&#34;通过循环列表并用自身的副本替换每个元素,原始indict中的列表被列表中的每个元素替换,循环dictlist的不同元素。

我知道我的解释有点乱。对此我很抱歉,但我发现很难用简短的方式解释。

此外,列表中元素的顺序与您在问题中要求的顺序不同。由于dict的各个键值对没有排序,因此无法确保元素将被展开的顺序,这也导致列表顺序也无法确保。