1

我想问一个特别的问题,我最近遇到的。

我有包含项目的列表,例如

list1 = ['library','book','room','author','description','genre','publish_date','price','title']

和包含键和值的字典,键是 list1 中的项目,值是它的子项,例如

dictionary1 = {'room': ['book'], 'title': [], 'price': [], 'author': [], 'library': [ 'room', 'book'], 'book': ['author', 'title', 'genre', 'price', 'publish_date', 'description'], 'publish_date': [], 'genre': [], 'description': []}

基本上我想要做的是浏览dictionary1中的项目,如果某个键的值也是带有值的键,我想将值的值添加到键中。

例如:

'library': ['room','book']

书包含作者、标题、流派、价格、出版日期、描述。

我想将所有这些项目添加到库密钥中,所以它看起来像:

'library': ['room','book','author', 'title', 'genre', 'price', 'publish_date', 'description'], 'publish_date': [], 'genre': [], 'description': []] 
4

3 回答 3

1

伪代码:

dictionary = ...//your input
dictionaryOut={}

list=[]

for key, value in dictionary
    dictionaryOut[key] = copy(value)

    if length(value[0]):
        list=[value[0]]

    while not empty(list):
        list.append(dictionary(list[0]))
        dictionaryOut[key].append(dictionary(list.pop(0))

只要我们在谈论 python 就应该这样做,并且附加到 value 实际上会更新字典中的列表。

于 2013-04-17T14:29:45.930 回答
0

您的大问题是:您不想复制数据您不想在迭代时吃掉数据。

  import pprint

  def main():
      inlist = ['library','book','room','author','description','genre','publish_date','price','title']
      mydict = {'room': ['book'], 'title': [], 'price': [], 'author': [], 'library': [ 'room', 'book'], 'book': ['author', 'title', 'genre', 'price', 'publish_date', 'description'], 'publish_date': [], 'genre': [], 'description': []}

      for item in inlist:
          values = set(mydict.get(item, []))
          workingset = values.copy() # preserve the original set of items so iterating doesn't go nuts
          for potential_key in values:
              # we're going to cast into sets to add them, then recast into lists
              workingset.update(set(mydict.get(potential_key, [])))

          if values:
              mydict[item] = list(workingset)

      pprint.pprint(mydict)
  if __name__ == '__main__':
      main()
于 2013-04-17T14:59:03.033 回答
0

字典理解:

{key: set(values + sum([dictionary1[value] for value in values], []))
       for key, values in dictionary1.iteritems()}
于 2013-04-17T15:10:04.377 回答