0

我是 python 新手,正在尝试掌握一些东西。我想从两个列表中创建一个字典。我有两组数据:

Person  |    Name
--------|--------
1       |   Jimmy
2       |    Mike
3       | Stanley
4       |    Will

我在列表中都有这两个,一个叫做“人”,一个叫做“名字”。我在一个脚本中执行此操作,该脚本通过多个文件来提取数据。每个列表的长度不同,其中包含不同的数据。本质上,我想做的是像这样打印数据:

1 \t Jimmy
2 \t Mike
3 \t Stanley
4 \t Will

我从 xml 文件中提取数据,这是我用来提取数据的代码:

for people in xml.iter('people'):
  person.append(people.find('person').text)
  name.append(people.find('name').text)

到目前为止,脚本运行良好,我可以分别打印出这两个列表。我不知道如何将它们一起打印出来,所以我的想法是将它们存储到字典中,但我真的不知道该怎么做。

4

7 回答 7

5

如果您只想打印可以使用的两个列表zip (doc)

for num,name in zip(num_list,name_list):
    print str(num) + '\t' + name

您可以使用相同的形式将这些对放入字典中(在您拥有列表之后)

name_dict = {}
for num,name in zip(num_list,name_list):
    name_dict[num] = name

然后打印

for num,name in name_dict.iteritems():
    print str(num) + '\t' + name
于 2012-12-19T18:54:58.423 回答
3

我认为您在这里不需要字典。要将列表的元素配对在一起,只需使用zip

In [27]: zip(person, name)
Out[27]: [(1, 'Jimmy'), (2, 'Mike'), (3, 'Stanley'), (4, 'Will')]

例如,

person = [1,2,3,4]
name = ['Jimmy', 'Mike', 'Stanley', 'Will']
for p, n in zip(person, name):
    print('{p}\t{n}'.format(p = p, n = n))

产量

1   Jimmy
2   Mike
3   Stanley
4   Will

PS。如果出于某种原因,您确实想要一个 dict,那么它也很容易形成:

In [28]: dict(zip(person, name))
Out[28]: {1: 'Jimmy', 2: 'Mike', 3: 'Stanley', 4: 'Will'}
于 2012-12-19T18:54:54.797 回答
2

在基本的python中。

people_dict = {}
for people in xml.iter('people'):
  person = people.find('person').text
  name = people.find('name').text
  people_dict[name] = person
于 2012-12-19T18:54:14.000 回答
1

使用 zip 内置函数创建字典:

dct = dict(zip(person, name))

然后打印字典,你可以这样做:

for k in dct:
    print '%s\t%s' % (k, dct[k])

祝你好运

麦克风

于 2012-12-19T18:54:59.493 回答
0

如果您只需将它们一起打印出来,那么元组列表可能比字典更合适,因为字典不保持顺序。您可以这样做:

people = []
for person in xml.iter('people'):
    people.append((person.find('person').text, person.find('name').text))

然后打印:

for p, name in people:
    print p + '\t' + name
于 2012-12-19T18:57:48.397 回答
0

使用zip内置函数。

In [3]: person = range(1,5)

In [4]: name = ['Jimmy', 'Mike', 'Stanley', 'Will']

In [5]: zip(person, name)
Out[5]: [(1, 'Jimmy'), (2, 'Mike'), (3, 'Stanley'), (4, 'Will')]

In [6]: for p,n in zip(person, name):
   ...:     print p, '\t', n
   ...:     
1   Jimmy
2   Mike
3   Stanley
4   Will
于 2012-12-19T18:58:07.880 回答
0

如果您使用的是 Python 2.7 或更新版本,则可以使用字典推导式。对于您的特定情况,它们可能有点矫枉过正,但它们是一种很好的技术,可以优雅地了解和解决这个问题。

于 2012-12-19T18:59:23.053 回答