1つ以上の文字列ではなく、タプル要素をリストボックスに挿入することに関係があると思います。代わりにこれを試してください:
listbox.insert(END, ' '.join([i]+dic[i])
これは、キーとすべてのサブ要素を 1 つの文字列に連結し、それらすべてを 1 行にまとめて、その 1 つをリストボックスに挿入します。ボタンを押した後、私のシステムでは次のように表示されます。

もう 1 つの方法は、呼び出しでタプルをアンパックすることです。
listbox.insert(END, *(i, dic[i][0], dic[i][1], dic[i][2]))
または、最初からそれらをタプルに入れないほうがよいでしょう:
listbox.insert(END, i, dic[i][0], dic[i][1], dic[i][2])
しかし、それよりもさらに良いのは、任意の長さのリストを処理できるため (コメントで @mgilson が指摘したように)、次のように記述することです。
listbox.insert(END, i, *dic[i])
とにかく、結果は次のようになります。

更新後にリストボックスの幅が自動的に更新されるようにする方法を次に示します。また、辞書を作成し、後でリストボックスに入力するときにその内容を反復処理する別の方法も示しています。
from Tkinter import *
def update_listbox():
longest = 20 # initial value acts as minimum width
for key,value in dic.iteritems():
entry = '{}: {}'.format(key, (', '.join(value)))
longest = max(longest, len(entry))
listbox.insert(END, entry)
listbox.config(width=longest) # width in "standard" or average characters
dic = {
'Foods': ['apple','grape','pizza'],
'Drinks': ['milk','soda','juice'],
}
root=Tk()
root.title('Listbox')
listbox = Listbox(root)
button = Button(root, text='push', command=update_listbox)
button.pack()
listbox.pack()
root.mainloop()
この結果:

ところで、ここに良いオンライン Tkinter リファレンスがあります。