0

辞書「日付」と「価格」に複数のペアリングリストのセットが保存されています。リストのサイズは不明ですが、次のように並べて印刷したいと思います。

date_value1 price_value1 date_value2 price_value 2  

ただし、現時点では、次のように、次々に印刷することしかできません。

for i in range(len(cities)):
    for j,k in zip(dates[i],prices[i]):
        print str(i) + " ; " +  j.text +" ; "+ k.text

私はそれが私がしたいことをするようにすることを試みました:

a = {}
for i in range(len(cities)):
    for j,k in zip(dates[i],prices[i]):
        print str(i) + " ; " +  j.text +" ; "+ k.text
        try:     a[i] = a[i-1] + " ; " + j.text +" ; "+ k.text
        except:  a[i] = " ; " + j.text +" ; "+ k.text

for i in a[len(cities)-1]:
    print a  

しかし、それは私が本当に理解できなかったまったく異なる何かをします。

手伝ってくれますか?ありがとう。


これが私のコードを修正した方法です。ありがとうFJ

a = 100000
for i in xrange(len(citynames)):
    if len(precos[i]) < a: a = len(precos[i])
    print citynames[i], " ; "," ; ",
print    

for j in xrange(a):
    for i in xrange(len(citynames)):      
        print datas[i][j].text, " ; " ,precos[i][j].text, " ; ", 
    print
4

2 に答える 2

2

したがって、ここで欠落していると思う重要な部分は、改行を自動的に追加せずに印刷する方法です,。たとえば、末尾にaを追加するだけです。

for i in range(len(cities)):
    for j,k in zip(dates[i],prices[i]):
        print str(i) + " ; " +  j.text +" ; "+ k.text,
    print

print内部ループ内のすべてのステートメントforは、改行の代わりにスペースを追加します。print内側のforループの直後のステートメントは、改行を出力するだけなので、次の反復で新しい行から開始します(それが必要かどうかはわかりません)。

str.join()ただし、より良い代替策は、印刷する文字列全体を構築するためにを使用することを検討することです。例えば:

for i in range(len(cities)):
    print ' '.join(str(i)+" ; "+j.text+" ; "+k.text for j, k in zip(dates[i], prices[i]))

これがあなたが望む正確なフォーマットであるかどうかはわかりませんが、あなたはそれをあなたが必要とするものに適応させることができるはずであることに注意してください。

于 2013-01-25T17:21:19.663 に答える
1

他の答えは機能しますが、コードレビューでそれを見た場合は、この答えをコメントとして残します。

データをフォーマットしてから表示します。

必要な形式で行のリストを作成します。次に、行を印刷します。このアプローチは、テストがより簡単で、読みやすく、分離されています。

def append_to_rows(city, dates, prices, row):
  for date, price in zip(dates, prices):
    row.append(' ; '.join([city, date.text, price.text]))


def print_rows(rows):
  for row in rows:
    print row


def print_data(cities, prices, dates):
  rows = []
  for city in cities:
    append_to_rows(city, dates[city], prices[city], rows)
  print_rows(rows)

テスト:

class Text(object):
  def __init__(self, text):
    self.text = text


cities = ['new york', 'san francisco', 'los angeles']
dates = {
  'new york': [
    Text('2008'),
    Text('2009'),
   ],
  'san francisco': [
    Text('2008'),
   ],
  'los angeles': [
    Text('2008'),
    Text('2009'),
    Text('2010'),
   ],
}
prices = {
  'new york': [
    Text('$500'),
    Text('$600'),
   ],
  'san francisco': [
    Text('$400'),
   ],
  'los angeles': [
    Text('$300'),
    Text('$400'),
    Text('$500'),
   ],
}

>>> print_data(cities, dates, prices)
new york ; 2008 ; $500
new york ; 2009 ; $600
san francisco ; 2008 ; $400
los angeles ; 2008 ; $300
los angeles ; 2009 ; $400
los angeles ; 2010 ; $500
于 2013-01-25T17:57:56.383 に答える